diff --git a/.eslintignore b/.eslintignore index 5b7664ac76..2a43251c75 100644 --- a/.eslintignore +++ b/.eslintignore @@ -13,13 +13,6 @@ website/client/ # Temporarilly disabled. These should be removed when the linting errors are fixed common/script/content/index.js -common/script/public/**/*.js - -website/server/**/api-v2/**/*.js -website/server/routes/payments.js -website/server/routes/pages.js -website/server/middlewares/apiThrottle.js -website/server/middlewares/forceRefresh.js debug-scripts/* scripts/* diff --git a/Gruntfile.js b/Gruntfile.js index 8f716518fe..6b3fb3b2e6 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -131,7 +131,7 @@ module.exports = function(grunt) { grunt.registerTask('build:test', ['test:prepare:translations', 'build:dev']); grunt.registerTask('test:prepare:translations', function() { - var i18n = require('./website/server/libs/api-v3/i18n'), + var i18n = require('./website/server/libs/i18n'), fs = require('fs'); fs.writeFileSync('test/spec/mocks/translations.js', "if(!window.env) window.env = {};\n" + diff --git a/common/audio/dewinTheme/Achievement_Unlocked.mp3 b/common/audio/dewinTheme/Achievement_Unlocked.mp3 new file mode 100644 index 0000000000..54b53b6a71 Binary files /dev/null and b/common/audio/dewinTheme/Achievement_Unlocked.mp3 differ diff --git a/common/audio/dewinTheme/Achievement_Unlocked.ogg b/common/audio/dewinTheme/Achievement_Unlocked.ogg new file mode 100644 index 0000000000..21ca0d8ca7 Binary files /dev/null and b/common/audio/dewinTheme/Achievement_Unlocked.ogg differ diff --git a/common/audio/dewinTheme/Boss_Battles_Background_Music.mp3 b/common/audio/dewinTheme/Boss_Battles_Background_Music.mp3 new file mode 100644 index 0000000000..67447214bd Binary files /dev/null and b/common/audio/dewinTheme/Boss_Battles_Background_Music.mp3 differ diff --git a/common/audio/dewinTheme/Boss_Battles_Background_Music.ogg b/common/audio/dewinTheme/Boss_Battles_Background_Music.ogg new file mode 100644 index 0000000000..f2f37dd8f5 Binary files /dev/null and b/common/audio/dewinTheme/Boss_Battles_Background_Music.ogg differ diff --git a/common/audio/dewinTheme/Chat.mp3 b/common/audio/dewinTheme/Chat.mp3 new file mode 100644 index 0000000000..56bd6fb980 Binary files /dev/null and b/common/audio/dewinTheme/Chat.mp3 differ diff --git a/common/audio/dewinTheme/Chat.ogg b/common/audio/dewinTheme/Chat.ogg new file mode 100644 index 0000000000..26b16bf82a Binary files /dev/null and b/common/audio/dewinTheme/Chat.ogg differ diff --git a/common/audio/dewinTheme/Checklist_Complete.mp3 b/common/audio/dewinTheme/Checklist_Complete.mp3 new file mode 100644 index 0000000000..0094f44086 Binary files /dev/null and b/common/audio/dewinTheme/Checklist_Complete.mp3 differ diff --git a/common/audio/dewinTheme/Checklist_Complete.ogg b/common/audio/dewinTheme/Checklist_Complete.ogg new file mode 100644 index 0000000000..af022c12f6 Binary files /dev/null and b/common/audio/dewinTheme/Checklist_Complete.ogg differ diff --git a/common/audio/dewinTheme/Daily.mp3 b/common/audio/dewinTheme/Daily.mp3 new file mode 100644 index 0000000000..2729f58039 Binary files /dev/null and b/common/audio/dewinTheme/Daily.mp3 differ diff --git a/common/audio/dewinTheme/Daily.ogg b/common/audio/dewinTheme/Daily.ogg new file mode 100644 index 0000000000..a8aa4f0543 Binary files /dev/null and b/common/audio/dewinTheme/Daily.ogg differ diff --git a/common/audio/dewinTheme/Death.mp3 b/common/audio/dewinTheme/Death.mp3 new file mode 100644 index 0000000000..cc01653a1d Binary files /dev/null and b/common/audio/dewinTheme/Death.mp3 differ diff --git a/common/audio/dewinTheme/Death.ogg b/common/audio/dewinTheme/Death.ogg new file mode 100644 index 0000000000..64899ca388 Binary files /dev/null and b/common/audio/dewinTheme/Death.ogg differ diff --git a/common/audio/dewinTheme/Item_Drop.mp3 b/common/audio/dewinTheme/Item_Drop.mp3 new file mode 100644 index 0000000000..c63251ebfa Binary files /dev/null and b/common/audio/dewinTheme/Item_Drop.mp3 differ diff --git a/common/audio/dewinTheme/Item_Drop.ogg b/common/audio/dewinTheme/Item_Drop.ogg new file mode 100644 index 0000000000..2dd963af97 Binary files /dev/null and b/common/audio/dewinTheme/Item_Drop.ogg differ diff --git a/common/audio/dewinTheme/Level_Up.mp3 b/common/audio/dewinTheme/Level_Up.mp3 new file mode 100644 index 0000000000..f2d7fc8df3 Binary files /dev/null and b/common/audio/dewinTheme/Level_Up.mp3 differ diff --git a/common/audio/dewinTheme/Level_Up.ogg b/common/audio/dewinTheme/Level_Up.ogg new file mode 100644 index 0000000000..738ecfb03f Binary files /dev/null and b/common/audio/dewinTheme/Level_Up.ogg differ diff --git a/common/audio/dewinTheme/Minus_Habit.mp3 b/common/audio/dewinTheme/Minus_Habit.mp3 new file mode 100644 index 0000000000..5adf67258d Binary files /dev/null and b/common/audio/dewinTheme/Minus_Habit.mp3 differ diff --git a/common/audio/dewinTheme/Minus_Habit.ogg b/common/audio/dewinTheme/Minus_Habit.ogg new file mode 100644 index 0000000000..f0f9353a3f Binary files /dev/null and b/common/audio/dewinTheme/Minus_Habit.ogg differ diff --git a/common/audio/dewinTheme/Plus_Habit.mp3 b/common/audio/dewinTheme/Plus_Habit.mp3 new file mode 100644 index 0000000000..5051e8f239 Binary files /dev/null and b/common/audio/dewinTheme/Plus_Habit.mp3 differ diff --git a/common/audio/dewinTheme/Plus_Habit.ogg b/common/audio/dewinTheme/Plus_Habit.ogg new file mode 100644 index 0000000000..9490713cf5 Binary files /dev/null and b/common/audio/dewinTheme/Plus_Habit.ogg differ diff --git a/common/audio/dewinTheme/Reward.mp3 b/common/audio/dewinTheme/Reward.mp3 new file mode 100644 index 0000000000..59191060e1 Binary files /dev/null and b/common/audio/dewinTheme/Reward.mp3 differ diff --git a/common/audio/dewinTheme/Reward.ogg b/common/audio/dewinTheme/Reward.ogg new file mode 100644 index 0000000000..0598d4f04f Binary files /dev/null and b/common/audio/dewinTheme/Reward.ogg differ diff --git a/common/audio/dewinTheme/Settings_Page_Background_Music.mp3 b/common/audio/dewinTheme/Settings_Page_Background_Music.mp3 new file mode 100644 index 0000000000..0e7a83f99c Binary files /dev/null and b/common/audio/dewinTheme/Settings_Page_Background_Music.mp3 differ diff --git a/common/audio/dewinTheme/Settings_Page_Background_Music.ogg b/common/audio/dewinTheme/Settings_Page_Background_Music.ogg new file mode 100644 index 0000000000..f05980858b Binary files /dev/null and b/common/audio/dewinTheme/Settings_Page_Background_Music.ogg differ diff --git a/common/audio/dewinTheme/Todo.mp3 b/common/audio/dewinTheme/Todo.mp3 new file mode 100644 index 0000000000..d5082ccd57 Binary files /dev/null and b/common/audio/dewinTheme/Todo.mp3 differ diff --git a/common/audio/dewinTheme/Todo.ogg b/common/audio/dewinTheme/Todo.ogg new file mode 100644 index 0000000000..cd173ec50e Binary files /dev/null and b/common/audio/dewinTheme/Todo.ogg differ diff --git a/common/css/index.css b/common/css/index.css index 9f8b87eec9..77e319a37c 100644 --- a/common/css/index.css +++ b/common/css/index.css @@ -1,9 +1,9 @@ /* Comment out for holiday events */ -/* .npc_ian { +.npc_ian { background: url("/common/img/sprites/npc_ian.gif") no-repeat; width: 78px; height: 135px; -} */ +} .quest_burnout { background: url("/common/img/sprites/quest_burnout.gif") no-repeat; diff --git a/common/dist/sprites/spritesmith-largeSprites-0.css b/common/dist/sprites/spritesmith-largeSprites-0.css index 8d4b4e8b5d..8a39780a9b 100644 --- a/common/dist/sprites/spritesmith-largeSprites-0.css +++ b/common/dist/sprites/spritesmith-largeSprites-0.css @@ -1,24 +1,24 @@ .2014_Fall_HealerPROMO2 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -546px -1378px; + background-position: -1001px -1378px; width: 90px; height: 90px; } .2014_Fall_Mage_PROMO9 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -1372px -808px; + background-position: -1357px -908px; width: 120px; height: 90px; } .2014_Fall_RoguePROMO3 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -452px -653px; + background-position: -306px -220px; width: 105px; height: 90px; } .2014_Fall_Warrior_PROMO { background-image: url(spritesmith-largeSprites-0.png); - background-position: -1104px -1275px; + background-position: -1295px -1275px; width: 90px; height: 90px; } @@ -30,13 +30,13 @@ } .promo_backgrounds_armoire_201602 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -1136px -199px; + background-position: -994px -199px; width: 141px; height: 294px; } .promo_backgrounds_armoire_201603 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -994px -199px; + background-position: -1136px -199px; width: 141px; height: 294px; } @@ -64,9 +64,15 @@ width: 139px; height: 588px; } +.promo_backgrounds_armoire_201608 { + background-image: url(spritesmith-largeSprites-0.png); + background-position: -452px -442px; + width: 140px; + height: 439px; +} .promo_backtoschool { background-image: url(spritesmith-largeSprites-0.png); - background-position: -1493px -302px; + background-position: -1493px -151px; width: 150px; height: 150px; } @@ -78,7 +84,7 @@ } .promo_chairs_glasses { background-image: url(spritesmith-largeSprites-0.png); - background-position: -452px -442px; + background-position: -452px -882px; width: 51px; height: 210px; } @@ -96,7 +102,7 @@ } .promo_dilatoryDistress { background-image: url(spritesmith-largeSprites-0.png); - background-position: -273px -1378px; + background-position: -1113px -1275px; width: 90px; height: 90px; } @@ -126,7 +132,7 @@ } .promo_enchanted_armoire_201509 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -455px -1378px; + background-position: -182px -1378px; width: 90px; height: 90px; } @@ -138,7 +144,7 @@ } .promo_enchanted_armoire_201601 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -831px -1275px; + background-position: -364px -1378px; width: 90px; height: 90px; } @@ -174,13 +180,13 @@ } .promo_mystery_201405 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -1377px -1275px; + background-position: -637px -1378px; width: 90px; height: 90px; } .promo_mystery_201406 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -452px -956px; + background-position: 0px -1378px; width: 90px; height: 96px; } @@ -198,7 +204,7 @@ } .promo_mystery_201409 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -649px -1275px; + background-position: -819px -1378px; width: 90px; height: 90px; } @@ -210,7 +216,7 @@ } .promo_mystery_201411 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -1013px -1275px; + background-position: -910px -1378px; width: 90px; height: 90px; } @@ -228,13 +234,13 @@ } .promo_mystery_201502 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -91px -1378px; + background-position: -931px -1275px; width: 90px; height: 90px; } .promo_mystery_201503 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -182px -1378px; + background-position: -455px -1378px; width: 90px; height: 90px; } @@ -246,7 +252,7 @@ } .promo_mystery_201505 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -364px -1378px; + background-position: -273px -1378px; width: 90px; height: 90px; } @@ -258,31 +264,31 @@ } .promo_mystery_201507 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -452px -744px; + background-position: -306px -417px; width: 90px; height: 105px; } .promo_mystery_201508 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -306px -220px; + background-position: -837px -1275px; width: 93px; height: 90px; } .promo_mystery_201509 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -740px -1275px; + background-position: -1386px -1275px; width: 90px; height: 90px; } .promo_mystery_201510 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -306px -311px; + background-position: -743px -1275px; width: 93px; height: 90px; } .promo_mystery_201511 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -922px -1275px; + background-position: -1204px -1275px; width: 90px; height: 90px; } @@ -294,40 +300,46 @@ } .promo_mystery_201601 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -1357px -908px; + background-position: -1372px -808px; width: 120px; height: 90px; } .promo_mystery_201602 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -1195px -1275px; + background-position: -1022px -1275px; width: 90px; height: 90px; } .promo_mystery_201603 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -1286px -1275px; + background-position: -728px -1378px; width: 90px; height: 90px; } .promo_mystery_201604 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -306px -402px; + background-position: -649px -1275px; width: 93px; height: 90px; } .promo_mystery_201605 { background-image: url(spritesmith-largeSprites-0.png); - background-position: 0px -1378px; + background-position: -546px -1378px; width: 90px; height: 90px; } .promo_mystery_201606 { background-image: url(spritesmith-largeSprites-0.png); - background-position: -452px -850px; + background-position: -306px -311px; width: 90px; height: 105px; } +.promo_mystery_201607 { + background-image: url(spritesmith-largeSprites-0.png); + background-position: -91px -1378px; + width: 90px; + height: 90px; +} .promo_mystery_3014 { background-image: url(spritesmith-largeSprites-0.png); background-position: -250px -1275px; @@ -360,19 +372,19 @@ } .promo_peppermint_flame { background-image: url(spritesmith-largeSprites-0.png); - background-position: -1493px -601px; + background-position: -1493px -453px; width: 140px; height: 147px; } .promo_pet_skins { background-image: url(spritesmith-largeSprites-0.png); - background-position: -1493px -453px; + background-position: -1493px -601px; width: 140px; height: 147px; } .customize-option.promo_pet_skins { background-image: url(spritesmith-largeSprites-0.png); - background-position: -1518px -468px; + background-position: -1518px -616px; width: 60px; height: 60px; } @@ -448,6 +460,12 @@ width: 114px; height: 87px; } +.promo_unconventional_armor { + background-image: url(spritesmith-largeSprites-0.png); + background-position: -886px -327px; + width: 60px; + height: 60px; +} .promo_updos { background-image: url(spritesmith-largeSprites-0.png); background-position: -1275px -494px; @@ -498,7 +516,7 @@ } .scene_coding { background-image: url(spritesmith-largeSprites-0.png); - background-position: -1493px -151px; + background-position: -1493px -302px; width: 150px; height: 150px; } @@ -510,7 +528,7 @@ } .welcome_basic_avatars { background-image: url(spritesmith-largeSprites-0.png); - background-position: -994px -642px; + background-position: -1241px -642px; width: 246px; height: 165px; } @@ -522,7 +540,7 @@ } .welcome_sample_tasks { background-image: url(spritesmith-largeSprites-0.png); - background-position: -1241px -642px; + background-position: -994px -642px; width: 246px; height: 165px; } diff --git a/common/dist/sprites/spritesmith-largeSprites-0.png b/common/dist/sprites/spritesmith-largeSprites-0.png index 795648814a..4bd3ac6982 100644 Binary files a/common/dist/sprites/spritesmith-largeSprites-0.png and b/common/dist/sprites/spritesmith-largeSprites-0.png differ diff --git a/common/dist/sprites/spritesmith-main-0.css b/common/dist/sprites/spritesmith-main-0.css index 5ab7384861..773b168007 100644 --- a/common/dist/sprites/spritesmith-main-0.css +++ b/common/dist/sprites/spritesmith-main-0.css @@ -1,516 +1,516 @@ .achievement-alien { background-image: url(spritesmith-main-0.png); - background-position: -1481px -1419px; + background-position: -1350px -1275px; width: 24px; height: 26px; } .achievement-alien2x { background-image: url(spritesmith-main-0.png); - background-position: -1365px -979px; + background-position: -1688px -508px; width: 48px; height: 52px; } .achievement-alpha { background-image: url(spritesmith-main-0.png); - background-position: -1456px -1419px; + background-position: -1325px -1275px; width: 24px; height: 26px; } .achievement-armor { background-image: url(spritesmith-main-0.png); - background-position: -1390px -1328px; + background-position: -1300px -1275px; width: 24px; height: 26px; } .achievement-armor2x { background-image: url(spritesmith-main-0.png); - background-position: -1365px -1070px; + background-position: -1688px -561px; width: 48px; height: 52px; } .achievement-bewilder { background-image: url(spritesmith-main-0.png); - background-position: -1390px -1237px; + background-position: -1250px -1275px; width: 24px; height: 26px; } .achievement-bewilder2x { background-image: url(spritesmith-main-0.png); - background-position: -1365px -1275px; + background-position: -1688px -667px; width: 48px; height: 52px; } .achievement-birthday { background-image: url(spritesmith-main-0.png); - background-position: -1390px -1123px; + background-position: -1200px -1275px; width: 24px; height: 26px; } .achievement-birthday2x { background-image: url(spritesmith-main-0.png); - background-position: -1547px -1457px; + background-position: -1688px -773px; width: 48px; height: 52px; } .achievement-boot { background-image: url(spritesmith-main-0.png); - background-position: -1390px -1032px; + background-position: -1150px -1275px; width: 24px; height: 26px; } .achievement-boot2x { background-image: url(spritesmith-main-0.png); - background-position: -777px -1548px; + background-position: -1688px -879px; width: 48px; height: 52px; } .achievement-bow { background-image: url(spritesmith-main-0.png); - background-position: -1390px -941px; + background-position: -1100px -1275px; width: 24px; height: 26px; } .achievement-bow2x { background-image: url(spritesmith-main-0.png); - background-position: -875px -1548px; + background-position: -1688px -985px; width: 48px; height: 52px; } .achievement-burnout { background-image: url(spritesmith-main-0.png); - background-position: -1688px -1606px; + background-position: -1050px -1275px; width: 24px; height: 26px; } .achievement-burnout2x { background-image: url(spritesmith-main-0.png); - background-position: -973px -1548px; + background-position: -1688px -1091px; width: 48px; height: 52px; } .achievement-cactus { background-image: url(spritesmith-main-0.png); - background-position: -1688px -1552px; + background-position: -1000px -1275px; width: 24px; height: 26px; } .achievement-cactus2x { background-image: url(spritesmith-main-0.png); - background-position: -1071px -1548px; + background-position: -1688px -1197px; width: 48px; height: 52px; } .achievement-cake { background-image: url(spritesmith-main-0.png); - background-position: -1688px -1498px; + background-position: -950px -1275px; width: 24px; height: 26px; } .achievement-cake2x { background-image: url(spritesmith-main-0.png); - background-position: -1169px -1548px; + background-position: -1688px -1303px; width: 48px; height: 52px; } .achievement-cave { background-image: url(spritesmith-main-0.png); - background-position: -1688px -1444px; + background-position: -1464px -1274px; width: 24px; height: 26px; } .achievement-cave2x { background-image: url(spritesmith-main-0.png); - background-position: -1267px -1548px; + background-position: -1688px -1409px; width: 48px; height: 52px; } .achievement-coffin { background-image: url(spritesmith-main-0.png); - background-position: -1688px -1390px; + background-position: -1646px -1456px; width: 24px; height: 26px; } .achievement-comment { background-image: url(spritesmith-main-0.png); - background-position: -1688px -1363px; + background-position: -1738px -1568px; width: 24px; height: 26px; } .achievement-comment2x { background-image: url(spritesmith-main-0.png); - background-position: -1365px -1548px; + background-position: -1688px -1515px; width: 48px; height: 52px; } .achievement-costumeContest { background-image: url(spritesmith-main-0.png); - background-position: -1688px -1309px; + background-position: -1688px -1568px; width: 24px; height: 26px; } .achievement-costumeContest2x { background-image: url(spritesmith-main-0.png); - background-position: -1463px -1548px; + background-position: -1506px -1365px; width: 48px; height: 52px; } .achievement-dilatory { background-image: url(spritesmith-main-0.png); - background-position: -1688px -1255px; + background-position: -1737px -1462px; width: 24px; height: 26px; } .achievement-firefox { background-image: url(spritesmith-main-0.png); - background-position: -1688px -1228px; + background-position: -1737px -1409px; width: 24px; height: 26px; } .achievement-greeting { background-image: url(spritesmith-main-0.png); - background-position: -1688px -1201px; + background-position: -1737px -1356px; width: 24px; height: 26px; } .achievement-greeting2x { background-image: url(spritesmith-main-0.png); - background-position: -1561px -1548px; + background-position: -141px -1275px; width: 48px; height: 52px; } .achievement-habitBirthday { background-image: url(spritesmith-main-0.png); - background-position: -1688px -1147px; + background-position: -1737px -1250px; width: 24px; height: 26px; } .achievement-habitBirthday2x { background-image: url(spritesmith-main-0.png); - background-position: -1610px -1548px; + background-position: -190px -1275px; width: 48px; height: 52px; } .achievement-habiticaDay { background-image: url(spritesmith-main-0.png); - background-position: -1688px -1093px; + background-position: -1737px -1144px; width: 24px; height: 26px; } .achievement-habiticaDay2x { background-image: url(spritesmith-main-0.png); - background-position: -1688px -53px; + background-position: -288px -1275px; width: 48px; height: 52px; } .achievement-heart { background-image: url(spritesmith-main-0.png); - background-position: -1688px -1039px; + background-position: -1737px -1038px; width: 24px; height: 26px; } .achievement-heart2x { background-image: url(spritesmith-main-0.png); - background-position: -1688px -159px; + background-position: -386px -1275px; width: 48px; height: 52px; } .achievement-karaoke-2x { background-image: url(spritesmith-main-0.png); - background-position: -1688px -265px; + background-position: -484px -1275px; width: 48px; height: 52px; } .achievement-karaoke { background-image: url(spritesmith-main-0.png); - background-position: -1688px -958px; + background-position: -1737px -879px; width: 24px; height: 26px; } .achievement-ninja { background-image: url(spritesmith-main-0.png); - background-position: -1688px -931px; + background-position: -1737px -826px; width: 24px; height: 26px; } .achievement-ninja2x { background-image: url(spritesmith-main-0.png); - background-position: -1688px -371px; + background-position: -582px -1275px; width: 48px; height: 52px; } .achievement-nye { background-image: url(spritesmith-main-0.png); - background-position: -1688px -877px; + background-position: -1737px -720px; width: 24px; height: 26px; } .achievement-nye2x { background-image: url(spritesmith-main-0.png); - background-position: -1688px -477px; + background-position: -680px -1275px; width: 48px; height: 52px; } .achievement-partyOn { background-image: url(spritesmith-main-0.png); - background-position: -1688px -823px; + background-position: -1737px -614px; width: 24px; height: 26px; } .achievement-partyOn2x { background-image: url(spritesmith-main-0.png); - background-position: -1365px -888px; + background-position: -1688px -455px; width: 48px; height: 52px; } .achievement-partyUp { background-image: url(spritesmith-main-0.png); - background-position: -1688px -1336px; + background-position: -1713px -1568px; width: 24px; height: 26px; } .achievement-partyUp2x { background-image: url(spritesmith-main-0.png); - background-position: -1688px -689px; + background-position: -876px -1275px; width: 48px; height: 52px; } .achievement-perfect { background-image: url(spritesmith-main-0.png); - background-position: -1688px -769px; + background-position: -1737px -508px; width: 24px; height: 26px; } .achievement-perfect2x { background-image: url(spritesmith-main-0.png); - background-position: -1688px -636px; + background-position: -827px -1275px; width: 48px; height: 52px; } .achievement-rat { background-image: url(spritesmith-main-0.png); - background-position: -1688px -796px; + background-position: -1737px -561px; width: 24px; height: 26px; } .achievement-rat2x { background-image: url(spritesmith-main-0.png); - background-position: -1688px -530px; + background-position: -729px -1275px; width: 48px; height: 52px; } .achievement-seafoam { background-image: url(spritesmith-main-0.png); - background-position: -1688px -850px; + background-position: -1737px -667px; width: 24px; height: 26px; } .achievement-seafoam2x { background-image: url(spritesmith-main-0.png); - background-position: -1688px -424px; + background-position: -631px -1275px; width: 48px; height: 52px; } .achievement-shield { background-image: url(spritesmith-main-0.png); - background-position: -1688px -904px; + background-position: -1737px -773px; width: 24px; height: 26px; } .achievement-shield2x { background-image: url(spritesmith-main-0.png); - background-position: -1688px -318px; + background-position: -533px -1275px; width: 48px; height: 52px; } .achievement-shinySeed { background-image: url(spritesmith-main-0.png); - background-position: -1688px -985px; + background-position: -1737px -932px; width: 24px; height: 26px; } .achievement-shinySeed2x { background-image: url(spritesmith-main-0.png); - background-position: -1688px -212px; + background-position: -435px -1275px; width: 48px; height: 52px; } .achievement-snowball { background-image: url(spritesmith-main-0.png); - background-position: -1688px -1012px; + background-position: -1737px -985px; width: 24px; height: 26px; } .achievement-snowball2x { background-image: url(spritesmith-main-0.png); - background-position: -1688px -106px; + background-position: -337px -1275px; width: 48px; height: 52px; } .achievement-spookySparkles { background-image: url(spritesmith-main-0.png); - background-position: -1688px -1066px; + background-position: -1737px -1091px; width: 24px; height: 26px; } .achievement-spookySparkles2x { background-image: url(spritesmith-main-0.png); - background-position: -1688px 0px; + background-position: -239px -1275px; width: 48px; height: 52px; } .achievement-stoikalm { background-image: url(spritesmith-main-0.png); - background-position: -1688px -1120px; + background-position: -1737px -1197px; width: 24px; height: 26px; } .achievement-sun { background-image: url(spritesmith-main-0.png); - background-position: -1688px -1174px; + background-position: -1737px -1303px; width: 24px; height: 26px; } .achievement-sun2x { background-image: url(spritesmith-main-0.png); - background-position: -1512px -1548px; + background-position: -1415px -1274px; width: 48px; height: 52px; } .achievement-sword { background-image: url(spritesmith-main-0.png); - background-position: -1688px -1282px; + background-position: -1737px -1515px; width: 24px; height: 26px; } .achievement-sword2x { background-image: url(spritesmith-main-0.png); - background-position: -1414px -1548px; + background-position: -1597px -1456px; width: 48px; height: 52px; } .achievement-thankyou { background-image: url(spritesmith-main-0.png); - background-position: -1688px -742px; + background-position: -1737px -455px; width: 24px; height: 26px; } .achievement-thankyou2x { background-image: url(spritesmith-main-0.png); - background-position: -1316px -1548px; + background-position: -1688px -1462px; width: 48px; height: 52px; } .achievement-thermometer { background-image: url(spritesmith-main-0.png); - background-position: -1688px -1417px; + background-position: -1555px -1365px; width: 24px; height: 26px; } .achievement-thermometer2x { background-image: url(spritesmith-main-0.png); - background-position: -1218px -1548px; + background-position: -1688px -1356px; width: 48px; height: 52px; } .achievement-tree { background-image: url(spritesmith-main-0.png); - background-position: -1688px -1471px; + background-position: -925px -1275px; width: 24px; height: 26px; } .achievement-tree2x { background-image: url(spritesmith-main-0.png); - background-position: -1120px -1548px; + background-position: -1688px -1250px; width: 48px; height: 52px; } .achievement-triadbingo { background-image: url(spritesmith-main-0.png); - background-position: -1688px -1525px; + background-position: -975px -1275px; width: 24px; height: 26px; } .achievement-triadbingo2x { background-image: url(spritesmith-main-0.png); - background-position: -1022px -1548px; + background-position: -1688px -1144px; width: 48px; height: 52px; } .achievement-ultimate-healer { background-image: url(spritesmith-main-0.png); - background-position: -1688px -1579px; + background-position: -1025px -1275px; width: 24px; height: 26px; } .achievement-ultimate-healer2x { background-image: url(spritesmith-main-0.png); - background-position: -924px -1548px; + background-position: -1688px -1038px; width: 48px; height: 52px; } .achievement-ultimate-mage { background-image: url(spritesmith-main-0.png); - background-position: -1365px -941px; + background-position: -1075px -1275px; width: 24px; height: 26px; } .achievement-ultimate-mage2x { background-image: url(spritesmith-main-0.png); - background-position: -826px -1548px; + background-position: -1688px -932px; width: 48px; height: 52px; } .achievement-ultimate-rogue { background-image: url(spritesmith-main-0.png); - background-position: -1365px -1032px; + background-position: -1125px -1275px; width: 24px; height: 26px; } .achievement-ultimate-rogue2x { background-image: url(spritesmith-main-0.png); - background-position: -728px -1548px; + background-position: -1688px -826px; width: 48px; height: 52px; } .achievement-ultimate-warrior { background-image: url(spritesmith-main-0.png); - background-position: -1365px -1123px; + background-position: -1175px -1275px; width: 24px; height: 26px; } .achievement-ultimate-warrior2x { background-image: url(spritesmith-main-0.png); - background-position: -1456px -1366px; + background-position: -1688px -720px; width: 48px; height: 52px; } .achievement-valentine { background-image: url(spritesmith-main-0.png); - background-position: -1365px -1237px; + background-position: -1225px -1275px; width: 24px; height: 26px; } .achievement-valentine2x { background-image: url(spritesmith-main-0.png); - background-position: -1365px -1184px; + background-position: -1688px -614px; width: 48px; height: 52px; } .achievement-wolf { background-image: url(spritesmith-main-0.png); - background-position: -1365px -1328px; + background-position: -1275px -1275px; width: 24px; height: 26px; } .achievement-wolf2x { background-image: url(spritesmith-main-0.png); - background-position: -1688px -583px; + background-position: -778px -1275px; width: 48px; height: 52px; } .background_alpine_slopes { background-image: url(spritesmith-main-0.png); - background-position: -564px -740px; + background-position: -705px -740px; width: 140px; height: 147px; } @@ -522,7 +522,7 @@ } .background_archery_range { background-image: url(spritesmith-main-0.png); - background-position: -141px -888px; + background-position: -423px -888px; width: 140px; height: 147px; } @@ -564,13 +564,13 @@ } .background_clouds { background-image: url(spritesmith-main-0.png); - background-position: -992px 0px; + background-position: -992px -148px; width: 140px; height: 147px; } .background_coral_reef { background-image: url(spritesmith-main-0.png); - background-position: -992px -592px; + background-position: 0px -888px; width: 140px; height: 147px; } @@ -582,37 +582,37 @@ } .background_crystal_cave { background-image: url(spritesmith-main-0.png); - background-position: -282px -888px; + background-position: -564px -888px; width: 140px; height: 147px; } .background_deep_mine { background-image: url(spritesmith-main-0.png); - background-position: -423px -888px; + background-position: -705px -888px; width: 140px; height: 147px; } .background_deep_sea { background-image: url(spritesmith-main-0.png); - background-position: -564px -888px; + background-position: -846px -888px; width: 140px; height: 147px; } .background_dilatory_castle { background-image: url(spritesmith-main-0.png); - background-position: -987px -1036px; + background-position: -1274px -148px; width: 140px; height: 147px; } .background_dilatory_ruins { background-image: url(spritesmith-main-0.png); - background-position: -1274px 0px; + background-position: -1274px -444px; width: 140px; height: 147px; } .background_distant_castle { background-image: url(spritesmith-main-0.png); - background-position: -1274px -148px; + background-position: -1274px -592px; width: 140px; height: 147px; } @@ -736,6 +736,12 @@ width: 140px; height: 147px; } +.background_idyllic_cabin { + background-image: url(spritesmith-main-0.png); + background-position: -564px -740px; + width: 140px; + height: 147px; +} .background_island_waterfalls { background-image: url(spritesmith-main-0.png); background-position: -426px -444px; @@ -744,13 +750,13 @@ } .background_lighthouse_shore { background-image: url(spritesmith-main-0.png); - background-position: -705px -740px; + background-position: -846px -740px; width: 140px; height: 147px; } .background_lilypad { background-image: url(spritesmith-main-0.png); - background-position: -846px -740px; + background-position: -992px 0px; width: 140px; height: 147px; } @@ -762,19 +768,25 @@ } .background_market { background-image: url(spritesmith-main-0.png); - background-position: -992px -148px; + background-position: -992px -296px; width: 140px; height: 147px; } .background_mountain_lake { background-image: url(spritesmith-main-0.png); - background-position: -992px -296px; + background-position: -992px -444px; + width: 140px; + height: 147px; +} +.background_mountain_pyramid { + background-image: url(spritesmith-main-0.png); + background-position: -992px -592px; width: 140px; height: 147px; } .background_night_dunes { background-image: url(spritesmith-main-0.png); - background-position: -992px -444px; + background-position: -992px -740px; width: 140px; height: 147px; } @@ -786,13 +798,13 @@ } .background_pagodas { background-image: url(spritesmith-main-0.png); - background-position: -992px -740px; + background-position: -141px -888px; width: 140px; height: 147px; } .background_pumpkin_patch { background-image: url(spritesmith-main-0.png); - background-position: 0px -888px; + background-position: -282px -888px; width: 140px; height: 147px; } @@ -822,112 +834,118 @@ } .background_seafarer_ship { background-image: url(spritesmith-main-0.png); - background-position: -705px -888px; + background-position: -987px -888px; width: 140px; height: 147px; } .background_shimmery_bubbles { background-image: url(spritesmith-main-0.png); - background-position: -846px -888px; + background-position: -705px -592px; width: 140px; height: 147px; } .background_slimy_swamp { background-image: url(spritesmith-main-0.png); - background-position: -987px -888px; + background-position: -1133px 0px; width: 140px; height: 147px; } .background_snowman_army { background-image: url(spritesmith-main-0.png); - background-position: -1133px 0px; + background-position: -1133px -148px; width: 140px; height: 147px; } .background_snowy_pines { background-image: url(spritesmith-main-0.png); - background-position: -1133px -148px; + background-position: -1133px -296px; width: 140px; height: 147px; } .background_snowy_sunrise { background-image: url(spritesmith-main-0.png); - background-position: -705px -592px; + background-position: -1133px -444px; width: 140px; height: 147px; } .background_south_pole { background-image: url(spritesmith-main-0.png); - background-position: -1133px -296px; + background-position: -1133px -592px; width: 140px; height: 147px; } .background_spring_rain { background-image: url(spritesmith-main-0.png); - background-position: -1133px -444px; + background-position: -1133px -740px; width: 140px; height: 147px; } .background_stable { background-image: url(spritesmith-main-0.png); - background-position: -1133px -592px; + background-position: -1133px -888px; width: 140px; height: 147px; } .background_stained_glass { background-image: url(spritesmith-main-0.png); - background-position: -1133px -740px; + background-position: 0px -1036px; width: 140px; height: 147px; } .background_starry_skies { background-image: url(spritesmith-main-0.png); - background-position: -1133px -888px; + background-position: -141px -1036px; width: 140px; height: 147px; } .background_stone_circle { - background-image: url(spritesmith-main-0.png); - background-position: 0px -1036px; - width: 140px; - height: 147px; -} -.background_sunken_ship { - background-image: url(spritesmith-main-0.png); - background-position: -141px -1036px; - width: 140px; - height: 147px; -} -.background_sunset_meadow { background-image: url(spritesmith-main-0.png); background-position: -282px -1036px; width: 140px; height: 147px; } -.background_sunset_oasis { +.background_stormy_ship { background-image: url(spritesmith-main-0.png); background-position: -423px -1036px; width: 140px; height: 147px; } -.background_sunset_savannah { +.background_sunken_ship { background-image: url(spritesmith-main-0.png); background-position: -564px -1036px; width: 140px; height: 147px; } -.background_swarming_darkness { +.background_sunset_meadow { background-image: url(spritesmith-main-0.png); background-position: -705px -1036px; width: 140px; height: 147px; } -.background_tavern { +.background_sunset_oasis { background-image: url(spritesmith-main-0.png); background-position: -846px -1036px; width: 140px; height: 147px; } +.background_sunset_savannah { + background-image: url(spritesmith-main-0.png); + background-position: -987px -1036px; + width: 140px; + height: 147px; +} +.background_swarming_darkness { + background-image: url(spritesmith-main-0.png); + background-position: -1128px -1036px; + width: 140px; + height: 147px; +} +.background_tavern { + background-image: url(spritesmith-main-0.png); + background-position: -1274px 0px; + width: 140px; + height: 147px; +} .background_thunderstorm { background-image: url(spritesmith-main-0.png); background-position: -142px -444px; @@ -936,7 +954,7 @@ } .background_tree_roots { background-image: url(spritesmith-main-0.png); - background-position: -1128px -1036px; + background-position: -1274px -296px; width: 140px; height: 147px; } @@ -954,1489 +972,1405 @@ } .background_volcano { background-image: url(spritesmith-main-0.png); - background-position: -1274px -296px; + background-position: -1274px -740px; width: 140px; height: 147px; } .background_waterfall_rock { background-image: url(spritesmith-main-0.png); - background-position: -1274px -444px; + background-position: -1274px -888px; width: 140px; height: 147px; } .background_winter_night { background-image: url(spritesmith-main-0.png); - background-position: -1274px -592px; + background-position: -1274px -1036px; width: 140px; height: 147px; } .background_winter_town { background-image: url(spritesmith-main-0.png); - background-position: -1274px -740px; + background-position: 0px -1184px; width: 140px; height: 147px; } .hair_beard_1_TRUred { background-image: url(spritesmith-main-0.png); - background-position: -1597px -1365px; + background-position: -1688px -182px; width: 90px; height: 90px; } .customize-option.hair_beard_1_TRUred { background-image: url(spritesmith-main-0.png); - background-position: -1622px -1380px; + background-position: -1713px -197px; width: 60px; height: 60px; } .hair_beard_1_aurora { background-image: url(spritesmith-main-0.png); - background-position: -455px -1457px; + background-position: -1597px -819px; width: 90px; height: 90px; } .customize-option.hair_beard_1_aurora { background-image: url(spritesmith-main-0.png); - background-position: -480px -1472px; + background-position: -1622px -834px; width: 60px; height: 60px; } .hair_beard_1_black { background-image: url(spritesmith-main-0.png); - background-position: -546px -1457px; + background-position: -1597px -910px; width: 90px; height: 90px; } .customize-option.hair_beard_1_black { background-image: url(spritesmith-main-0.png); - background-position: -571px -1472px; + background-position: -1622px -925px; width: 60px; height: 60px; } .hair_beard_1_blond { background-image: url(spritesmith-main-0.png); - background-position: -637px -1457px; + background-position: -1597px -1001px; width: 90px; height: 90px; } .customize-option.hair_beard_1_blond { background-image: url(spritesmith-main-0.png); - background-position: -662px -1472px; + background-position: -1622px -1016px; width: 60px; height: 60px; } .hair_beard_1_blue { background-image: url(spritesmith-main-0.png); - background-position: -728px -1457px; + background-position: -1597px -1092px; width: 90px; height: 90px; } .customize-option.hair_beard_1_blue { background-image: url(spritesmith-main-0.png); - background-position: -753px -1472px; + background-position: -1622px -1107px; width: 60px; height: 60px; } .hair_beard_1_brown { background-image: url(spritesmith-main-0.png); - background-position: -819px -1457px; + background-position: -1597px -1183px; width: 90px; height: 90px; } .customize-option.hair_beard_1_brown { background-image: url(spritesmith-main-0.png); - background-position: -844px -1472px; + background-position: -1622px -1198px; width: 60px; height: 60px; } .hair_beard_1_candycane { background-image: url(spritesmith-main-0.png); - background-position: -910px -1457px; + background-position: -1597px -1274px; width: 90px; height: 90px; } .customize-option.hair_beard_1_candycane { background-image: url(spritesmith-main-0.png); - background-position: -935px -1472px; + background-position: -1622px -1289px; width: 60px; height: 60px; } .hair_beard_1_candycorn { background-image: url(spritesmith-main-0.png); - background-position: -1001px -1457px; + background-position: -1597px -1365px; width: 90px; height: 90px; } .customize-option.hair_beard_1_candycorn { background-image: url(spritesmith-main-0.png); - background-position: -1026px -1472px; + background-position: -1622px -1380px; width: 60px; height: 60px; } .hair_beard_1_festive { background-image: url(spritesmith-main-0.png); - background-position: -1092px -1457px; + background-position: 0px -1514px; width: 90px; height: 90px; } .customize-option.hair_beard_1_festive { background-image: url(spritesmith-main-0.png); - background-position: -1117px -1472px; + background-position: -25px -1529px; width: 60px; height: 60px; } .hair_beard_1_frost { background-image: url(spritesmith-main-0.png); - background-position: -1183px -1457px; + background-position: -91px -1514px; width: 90px; height: 90px; } .customize-option.hair_beard_1_frost { background-image: url(spritesmith-main-0.png); - background-position: -1208px -1472px; + background-position: -116px -1529px; width: 60px; height: 60px; } .hair_beard_1_ghostwhite { background-image: url(spritesmith-main-0.png); - background-position: -1274px -1457px; + background-position: -182px -1514px; width: 90px; height: 90px; } .customize-option.hair_beard_1_ghostwhite { background-image: url(spritesmith-main-0.png); - background-position: -1299px -1472px; + background-position: -207px -1529px; width: 60px; height: 60px; } .hair_beard_1_green { background-image: url(spritesmith-main-0.png); - background-position: -1365px -1457px; + background-position: -273px -1514px; width: 90px; height: 90px; } .customize-option.hair_beard_1_green { background-image: url(spritesmith-main-0.png); - background-position: -1390px -1472px; + background-position: -298px -1529px; width: 60px; height: 60px; } .hair_beard_1_halloween { background-image: url(spritesmith-main-0.png); - background-position: -1456px -1457px; + background-position: -364px -1514px; width: 90px; height: 90px; } .customize-option.hair_beard_1_halloween { background-image: url(spritesmith-main-0.png); - background-position: -1481px -1472px; + background-position: -389px -1529px; width: 60px; height: 60px; } .hair_beard_1_holly { background-image: url(spritesmith-main-0.png); - background-position: -1597px 0px; + background-position: -455px -1514px; width: 90px; height: 90px; } .customize-option.hair_beard_1_holly { background-image: url(spritesmith-main-0.png); - background-position: -1622px -15px; + background-position: -480px -1529px; width: 60px; height: 60px; } .hair_beard_1_hollygreen { background-image: url(spritesmith-main-0.png); - background-position: -1597px -91px; + background-position: -546px -1514px; width: 90px; height: 90px; } .customize-option.hair_beard_1_hollygreen { background-image: url(spritesmith-main-0.png); - background-position: -1622px -106px; + background-position: -571px -1529px; width: 60px; height: 60px; } .hair_beard_1_midnight { background-image: url(spritesmith-main-0.png); - background-position: -1597px -182px; + background-position: -637px -1514px; width: 90px; height: 90px; } .customize-option.hair_beard_1_midnight { background-image: url(spritesmith-main-0.png); - background-position: -1622px -197px; + background-position: -662px -1529px; width: 60px; height: 60px; } .hair_beard_1_pblue { background-image: url(spritesmith-main-0.png); - background-position: -1597px -273px; + background-position: -728px -1514px; width: 90px; height: 90px; } .customize-option.hair_beard_1_pblue { background-image: url(spritesmith-main-0.png); - background-position: -1622px -288px; + background-position: -753px -1529px; width: 60px; height: 60px; } .hair_beard_1_peppermint { background-image: url(spritesmith-main-0.png); - background-position: -1597px -364px; + background-position: -819px -1514px; width: 90px; height: 90px; } .customize-option.hair_beard_1_peppermint { background-image: url(spritesmith-main-0.png); - background-position: -1622px -379px; + background-position: -844px -1529px; width: 60px; height: 60px; } .hair_beard_1_pgreen { background-image: url(spritesmith-main-0.png); - background-position: -1597px -455px; + background-position: -910px -1514px; width: 90px; height: 90px; } .customize-option.hair_beard_1_pgreen { background-image: url(spritesmith-main-0.png); - background-position: -1622px -470px; + background-position: -935px -1529px; width: 60px; height: 60px; } .hair_beard_1_porange { background-image: url(spritesmith-main-0.png); - background-position: -1597px -546px; + background-position: -1001px -1514px; width: 90px; height: 90px; } .customize-option.hair_beard_1_porange { background-image: url(spritesmith-main-0.png); - background-position: -1622px -561px; + background-position: -1026px -1529px; width: 60px; height: 60px; } .hair_beard_1_ppink { background-image: url(spritesmith-main-0.png); - background-position: -1597px -637px; + background-position: -1092px -1514px; width: 90px; height: 90px; } .customize-option.hair_beard_1_ppink { background-image: url(spritesmith-main-0.png); - background-position: -1622px -652px; + background-position: -1117px -1529px; width: 60px; height: 60px; } .hair_beard_1_ppurple { background-image: url(spritesmith-main-0.png); - background-position: -1597px -728px; + background-position: -1183px -1514px; width: 90px; height: 90px; } .customize-option.hair_beard_1_ppurple { background-image: url(spritesmith-main-0.png); - background-position: -1622px -743px; + background-position: -1208px -1529px; width: 60px; height: 60px; } .hair_beard_1_pumpkin { background-image: url(spritesmith-main-0.png); - background-position: -1597px -819px; + background-position: -1274px -1514px; width: 90px; height: 90px; } .customize-option.hair_beard_1_pumpkin { background-image: url(spritesmith-main-0.png); - background-position: -1622px -834px; + background-position: -1299px -1529px; width: 60px; height: 60px; } .hair_beard_1_purple { background-image: url(spritesmith-main-0.png); - background-position: -1597px -910px; + background-position: -1365px -1514px; width: 90px; height: 90px; } .customize-option.hair_beard_1_purple { background-image: url(spritesmith-main-0.png); - background-position: -1622px -925px; + background-position: -1390px -1529px; width: 60px; height: 60px; } .hair_beard_1_pyellow { background-image: url(spritesmith-main-0.png); - background-position: -1597px -1001px; + background-position: -1456px -1514px; width: 90px; height: 90px; } .customize-option.hair_beard_1_pyellow { background-image: url(spritesmith-main-0.png); - background-position: -1622px -1016px; + background-position: -1481px -1529px; width: 60px; height: 60px; } .hair_beard_1_rainbow { background-image: url(spritesmith-main-0.png); - background-position: -1597px -1092px; + background-position: -1547px -1514px; width: 90px; height: 90px; } .customize-option.hair_beard_1_rainbow { background-image: url(spritesmith-main-0.png); - background-position: -1622px -1107px; + background-position: -1572px -1529px; width: 60px; height: 60px; } .hair_beard_1_red { background-image: url(spritesmith-main-0.png); - background-position: -1597px -1183px; + background-position: -1688px 0px; width: 90px; height: 90px; } .customize-option.hair_beard_1_red { background-image: url(spritesmith-main-0.png); - background-position: -1622px -1198px; + background-position: -1713px -15px; width: 60px; height: 60px; } .hair_beard_1_snowy { background-image: url(spritesmith-main-0.png); - background-position: -1597px -1274px; + background-position: -1688px -91px; width: 90px; height: 90px; } .customize-option.hair_beard_1_snowy { background-image: url(spritesmith-main-0.png); - background-position: -1622px -1289px; + background-position: -1713px -106px; width: 60px; height: 60px; } .hair_beard_1_white { background-image: url(spritesmith-main-0.png); - background-position: -1597px -1456px; + background-position: -1688px -273px; width: 90px; height: 90px; } .customize-option.hair_beard_1_white { background-image: url(spritesmith-main-0.png); - background-position: -1622px -1471px; + background-position: -1713px -288px; width: 60px; height: 60px; } .hair_beard_1_winternight { background-image: url(spritesmith-main-0.png); - background-position: 0px -1548px; + background-position: -1688px -364px; width: 90px; height: 90px; } .customize-option.hair_beard_1_winternight { background-image: url(spritesmith-main-0.png); - background-position: -25px -1563px; + background-position: -1713px -379px; width: 60px; height: 60px; } .hair_beard_1_winterstar { background-image: url(spritesmith-main-0.png); - background-position: -91px -1548px; + background-position: 0px -1423px; width: 90px; height: 90px; } .customize-option.hair_beard_1_winterstar { background-image: url(spritesmith-main-0.png); - background-position: -116px -1563px; + background-position: -25px -1438px; width: 60px; height: 60px; } .hair_beard_1_yellow { background-image: url(spritesmith-main-0.png); - background-position: -182px -1548px; + background-position: -414px -1184px; width: 90px; height: 90px; } .customize-option.hair_beard_1_yellow { background-image: url(spritesmith-main-0.png); - background-position: -207px -1563px; + background-position: -439px -1199px; width: 60px; height: 60px; } .hair_beard_1_zombie { background-image: url(spritesmith-main-0.png); - background-position: -273px -1548px; + background-position: -323px -1184px; width: 90px; height: 90px; } .customize-option.hair_beard_1_zombie { background-image: url(spritesmith-main-0.png); - background-position: -298px -1563px; + background-position: -348px -1199px; width: 60px; height: 60px; } .hair_beard_2_TRUred { background-image: url(spritesmith-main-0.png); - background-position: -1506px -455px; + background-position: -1506px -1274px; width: 90px; height: 90px; } .customize-option.hair_beard_2_TRUred { background-image: url(spritesmith-main-0.png); - background-position: -1531px -470px; + background-position: -1531px -1289px; width: 60px; height: 60px; } .hair_beard_2_aurora { background-image: url(spritesmith-main-0.png); - background-position: -364px -1548px; + background-position: -232px -1184px; width: 90px; height: 90px; } .customize-option.hair_beard_2_aurora { background-image: url(spritesmith-main-0.png); - background-position: -389px -1563px; + background-position: -257px -1199px; width: 60px; height: 60px; } .hair_beard_2_black { background-image: url(spritesmith-main-0.png); - background-position: -455px -1548px; + background-position: -141px -1184px; width: 90px; height: 90px; } .customize-option.hair_beard_2_black { background-image: url(spritesmith-main-0.png); - background-position: -480px -1563px; + background-position: -166px -1199px; width: 60px; height: 60px; } .hair_beard_2_blond { background-image: url(spritesmith-main-0.png); - background-position: -546px -1548px; + background-position: -1597px -728px; width: 90px; height: 90px; } .customize-option.hair_beard_2_blond { background-image: url(spritesmith-main-0.png); - background-position: -571px -1563px; + background-position: -1622px -743px; width: 60px; height: 60px; } .hair_beard_2_blue { background-image: url(spritesmith-main-0.png); - background-position: -637px -1548px; + background-position: -1597px -637px; width: 90px; height: 90px; } .customize-option.hair_beard_2_blue { background-image: url(spritesmith-main-0.png); - background-position: -662px -1563px; + background-position: -1622px -652px; width: 60px; height: 60px; } .hair_beard_2_brown { background-image: url(spritesmith-main-0.png); - background-position: -1506px 0px; + background-position: -1597px -546px; width: 90px; height: 90px; } .customize-option.hair_beard_2_brown { background-image: url(spritesmith-main-0.png); - background-position: -1531px -15px; + background-position: -1622px -561px; width: 60px; height: 60px; } .hair_beard_2_candycane { background-image: url(spritesmith-main-0.png); - background-position: -273px -1184px; + background-position: -1597px -455px; width: 90px; height: 90px; } .customize-option.hair_beard_2_candycane { background-image: url(spritesmith-main-0.png); - background-position: -298px -1199px; + background-position: -1622px -470px; width: 60px; height: 60px; } .hair_beard_2_candycorn { background-image: url(spritesmith-main-0.png); - background-position: -182px -1184px; + background-position: -1597px -364px; width: 90px; height: 90px; } .customize-option.hair_beard_2_candycorn { background-image: url(spritesmith-main-0.png); - background-position: -207px -1199px; + background-position: -1622px -379px; width: 60px; height: 60px; } .hair_beard_2_festive { background-image: url(spritesmith-main-0.png); - background-position: -91px -1184px; + background-position: -1597px -273px; width: 90px; height: 90px; } .customize-option.hair_beard_2_festive { background-image: url(spritesmith-main-0.png); - background-position: -116px -1199px; + background-position: -1622px -288px; width: 60px; height: 60px; } .hair_beard_2_frost { background-image: url(spritesmith-main-0.png); - background-position: 0px -1184px; + background-position: -1597px -182px; width: 90px; height: 90px; } .customize-option.hair_beard_2_frost { background-image: url(spritesmith-main-0.png); - background-position: -25px -1199px; + background-position: -1622px -197px; width: 60px; height: 60px; } .hair_beard_2_ghostwhite { background-image: url(spritesmith-main-0.png); - background-position: -1274px -1070px; + background-position: -1597px -91px; width: 90px; height: 90px; } .customize-option.hair_beard_2_ghostwhite { background-image: url(spritesmith-main-0.png); - background-position: -1299px -1085px; + background-position: -1622px -106px; width: 60px; height: 60px; } .hair_beard_2_green { background-image: url(spritesmith-main-0.png); - background-position: -1274px -979px; + background-position: -1597px 0px; width: 90px; height: 90px; } .customize-option.hair_beard_2_green { background-image: url(spritesmith-main-0.png); - background-position: -1299px -994px; + background-position: -1622px -15px; width: 60px; height: 60px; } .hair_beard_2_halloween { background-image: url(spritesmith-main-0.png); - background-position: -1274px -888px; + background-position: -1456px -1423px; width: 90px; height: 90px; } .customize-option.hair_beard_2_halloween { background-image: url(spritesmith-main-0.png); - background-position: -1299px -903px; + background-position: -1481px -1438px; width: 60px; height: 60px; } .hair_beard_2_holly { background-image: url(spritesmith-main-0.png); - background-position: -364px -1457px; + background-position: -1365px -1423px; width: 90px; height: 90px; } .customize-option.hair_beard_2_holly { background-image: url(spritesmith-main-0.png); - background-position: -389px -1472px; + background-position: -1390px -1438px; width: 60px; height: 60px; } .hair_beard_2_hollygreen { background-image: url(spritesmith-main-0.png); - background-position: -273px -1457px; + background-position: -1274px -1423px; width: 90px; height: 90px; } .customize-option.hair_beard_2_hollygreen { background-image: url(spritesmith-main-0.png); - background-position: -298px -1472px; + background-position: -1299px -1438px; width: 60px; height: 60px; } .hair_beard_2_midnight { background-image: url(spritesmith-main-0.png); - background-position: -182px -1457px; + background-position: -1183px -1423px; width: 90px; height: 90px; } .customize-option.hair_beard_2_midnight { background-image: url(spritesmith-main-0.png); - background-position: -207px -1472px; + background-position: -1208px -1438px; width: 60px; height: 60px; } .hair_beard_2_pblue { background-image: url(spritesmith-main-0.png); - background-position: -91px -1457px; + background-position: -1092px -1423px; width: 90px; height: 90px; } .customize-option.hair_beard_2_pblue { background-image: url(spritesmith-main-0.png); - background-position: -116px -1472px; + background-position: -1117px -1438px; width: 60px; height: 60px; } .hair_beard_2_peppermint { background-image: url(spritesmith-main-0.png); - background-position: 0px -1457px; + background-position: -1001px -1423px; width: 90px; height: 90px; } .customize-option.hair_beard_2_peppermint { background-image: url(spritesmith-main-0.png); - background-position: -25px -1472px; + background-position: -1026px -1438px; width: 60px; height: 60px; } .hair_beard_2_pgreen { background-image: url(spritesmith-main-0.png); - background-position: -1506px -1365px; + background-position: -910px -1423px; width: 90px; height: 90px; } .customize-option.hair_beard_2_pgreen { background-image: url(spritesmith-main-0.png); - background-position: -1531px -1380px; + background-position: -935px -1438px; width: 60px; height: 60px; } .hair_beard_2_porange { background-image: url(spritesmith-main-0.png); - background-position: -1506px -1274px; + background-position: -819px -1423px; width: 90px; height: 90px; } .customize-option.hair_beard_2_porange { background-image: url(spritesmith-main-0.png); - background-position: -1531px -1289px; + background-position: -844px -1438px; width: 60px; height: 60px; } .hair_beard_2_ppink { background-image: url(spritesmith-main-0.png); - background-position: -1506px -1183px; + background-position: -728px -1423px; width: 90px; height: 90px; } .customize-option.hair_beard_2_ppink { background-image: url(spritesmith-main-0.png); - background-position: -1531px -1198px; + background-position: -753px -1438px; width: 60px; height: 60px; } .hair_beard_2_ppurple { background-image: url(spritesmith-main-0.png); - background-position: -1506px -1092px; + background-position: -637px -1423px; width: 90px; height: 90px; } .customize-option.hair_beard_2_ppurple { background-image: url(spritesmith-main-0.png); - background-position: -1531px -1107px; + background-position: -662px -1438px; width: 60px; height: 60px; } .hair_beard_2_pumpkin { background-image: url(spritesmith-main-0.png); - background-position: -1506px -1001px; + background-position: -546px -1423px; width: 90px; height: 90px; } .customize-option.hair_beard_2_pumpkin { background-image: url(spritesmith-main-0.png); - background-position: -1531px -1016px; + background-position: -571px -1438px; width: 60px; height: 60px; } .hair_beard_2_purple { background-image: url(spritesmith-main-0.png); - background-position: -1506px -910px; + background-position: -455px -1423px; width: 90px; height: 90px; } .customize-option.hair_beard_2_purple { background-image: url(spritesmith-main-0.png); - background-position: -1531px -925px; + background-position: -480px -1438px; width: 60px; height: 60px; } .hair_beard_2_pyellow { background-image: url(spritesmith-main-0.png); - background-position: -1506px -819px; + background-position: -364px -1423px; width: 90px; height: 90px; } .customize-option.hair_beard_2_pyellow { background-image: url(spritesmith-main-0.png); - background-position: -1531px -834px; + background-position: -389px -1438px; width: 60px; height: 60px; } .hair_beard_2_rainbow { background-image: url(spritesmith-main-0.png); - background-position: -1506px -728px; + background-position: -273px -1423px; width: 90px; height: 90px; } .customize-option.hair_beard_2_rainbow { background-image: url(spritesmith-main-0.png); - background-position: -1531px -743px; + background-position: -298px -1438px; width: 60px; height: 60px; } .hair_beard_2_red { background-image: url(spritesmith-main-0.png); - background-position: -1506px -637px; + background-position: -182px -1423px; width: 90px; height: 90px; } .customize-option.hair_beard_2_red { background-image: url(spritesmith-main-0.png); - background-position: -1531px -652px; + background-position: -207px -1438px; width: 60px; height: 60px; } .hair_beard_2_snowy { background-image: url(spritesmith-main-0.png); - background-position: -1506px -546px; + background-position: -91px -1423px; width: 90px; height: 90px; } .customize-option.hair_beard_2_snowy { background-image: url(spritesmith-main-0.png); - background-position: -1531px -561px; + background-position: -116px -1438px; width: 60px; height: 60px; } .hair_beard_2_white { background-image: url(spritesmith-main-0.png); - background-position: -1506px -364px; + background-position: -1506px -1183px; width: 90px; height: 90px; } .customize-option.hair_beard_2_white { background-image: url(spritesmith-main-0.png); - background-position: -1531px -379px; + background-position: -1531px -1198px; width: 60px; height: 60px; } .hair_beard_2_winternight { background-image: url(spritesmith-main-0.png); - background-position: -1506px -273px; + background-position: -1506px -1092px; width: 90px; height: 90px; } .customize-option.hair_beard_2_winternight { background-image: url(spritesmith-main-0.png); - background-position: -1531px -288px; + background-position: -1531px -1107px; width: 60px; height: 60px; } .hair_beard_2_winterstar { background-image: url(spritesmith-main-0.png); - background-position: -1506px -182px; + background-position: -1506px -1001px; width: 90px; height: 90px; } .customize-option.hair_beard_2_winterstar { background-image: url(spritesmith-main-0.png); - background-position: -1531px -197px; + background-position: -1531px -1016px; width: 60px; height: 60px; } .hair_beard_2_yellow { background-image: url(spritesmith-main-0.png); - background-position: -1506px -91px; + background-position: -1506px -910px; width: 90px; height: 90px; } .customize-option.hair_beard_2_yellow { background-image: url(spritesmith-main-0.png); - background-position: -1531px -106px; + background-position: -1531px -925px; width: 60px; height: 60px; } .hair_beard_2_zombie { background-image: url(spritesmith-main-0.png); - background-position: -1365px -1366px; + background-position: -1506px -819px; width: 90px; height: 90px; } .customize-option.hair_beard_2_zombie { background-image: url(spritesmith-main-0.png); - background-position: -1390px -1381px; + background-position: -1531px -834px; width: 60px; height: 60px; } .hair_beard_3_TRUred { background-image: url(spritesmith-main-0.png); - background-position: -1415px -182px; + background-position: -1415px -1001px; width: 90px; height: 90px; } .customize-option.hair_beard_3_TRUred { background-image: url(spritesmith-main-0.png); - background-position: -1440px -197px; + background-position: -1440px -1016px; width: 60px; height: 60px; } .hair_beard_3_aurora { background-image: url(spritesmith-main-0.png); - background-position: -1274px -1366px; + background-position: -1506px -728px; width: 90px; height: 90px; } .customize-option.hair_beard_3_aurora { background-image: url(spritesmith-main-0.png); - background-position: -1299px -1381px; + background-position: -1531px -743px; width: 60px; height: 60px; } .hair_beard_3_black { background-image: url(spritesmith-main-0.png); - background-position: -1183px -1366px; + background-position: -1506px -637px; width: 90px; height: 90px; } .customize-option.hair_beard_3_black { background-image: url(spritesmith-main-0.png); - background-position: -1208px -1381px; + background-position: -1531px -652px; width: 60px; height: 60px; } .hair_beard_3_blond { background-image: url(spritesmith-main-0.png); - background-position: -1092px -1366px; + background-position: -1506px -546px; width: 90px; height: 90px; } .customize-option.hair_beard_3_blond { background-image: url(spritesmith-main-0.png); - background-position: -1117px -1381px; + background-position: -1531px -561px; width: 60px; height: 60px; } .hair_beard_3_blue { background-image: url(spritesmith-main-0.png); - background-position: -1001px -1366px; + background-position: -1506px -455px; width: 90px; height: 90px; } .customize-option.hair_beard_3_blue { background-image: url(spritesmith-main-0.png); - background-position: -1026px -1381px; + background-position: -1531px -470px; width: 60px; height: 60px; } .hair_beard_3_brown { background-image: url(spritesmith-main-0.png); - background-position: -910px -1366px; + background-position: -1506px -364px; width: 90px; height: 90px; } .customize-option.hair_beard_3_brown { background-image: url(spritesmith-main-0.png); - background-position: -935px -1381px; + background-position: -1531px -379px; width: 60px; height: 60px; } .hair_beard_3_candycane { background-image: url(spritesmith-main-0.png); - background-position: -819px -1366px; + background-position: -1506px -273px; width: 90px; height: 90px; } .customize-option.hair_beard_3_candycane { background-image: url(spritesmith-main-0.png); - background-position: -844px -1381px; + background-position: -1531px -288px; width: 60px; height: 60px; } .hair_beard_3_candycorn { background-image: url(spritesmith-main-0.png); - background-position: -728px -1366px; + background-position: -1506px -182px; width: 90px; height: 90px; } .customize-option.hair_beard_3_candycorn { background-image: url(spritesmith-main-0.png); - background-position: -753px -1381px; + background-position: -1531px -197px; width: 60px; height: 60px; } .hair_beard_3_festive { background-image: url(spritesmith-main-0.png); - background-position: -637px -1366px; + background-position: -1506px -91px; width: 90px; height: 90px; } .customize-option.hair_beard_3_festive { background-image: url(spritesmith-main-0.png); - background-position: -662px -1381px; + background-position: -1531px -106px; width: 60px; height: 60px; } .hair_beard_3_frost { background-image: url(spritesmith-main-0.png); - background-position: -546px -1366px; + background-position: -1506px 0px; width: 90px; height: 90px; } .customize-option.hair_beard_3_frost { background-image: url(spritesmith-main-0.png); - background-position: -571px -1381px; + background-position: -1531px -15px; width: 60px; height: 60px; } .hair_beard_3_ghostwhite { background-image: url(spritesmith-main-0.png); - background-position: -455px -1366px; + background-position: -1365px -1332px; width: 90px; height: 90px; } .customize-option.hair_beard_3_ghostwhite { background-image: url(spritesmith-main-0.png); - background-position: -480px -1381px; + background-position: -1390px -1347px; width: 60px; height: 60px; } .hair_beard_3_green { background-image: url(spritesmith-main-0.png); - background-position: -364px -1366px; + background-position: -1274px -1332px; width: 90px; height: 90px; } .customize-option.hair_beard_3_green { background-image: url(spritesmith-main-0.png); - background-position: -389px -1381px; + background-position: -1299px -1347px; width: 60px; height: 60px; } .hair_beard_3_halloween { background-image: url(spritesmith-main-0.png); - background-position: -273px -1366px; + background-position: -1183px -1332px; width: 90px; height: 90px; } .customize-option.hair_beard_3_halloween { background-image: url(spritesmith-main-0.png); - background-position: -298px -1381px; + background-position: -1208px -1347px; width: 60px; height: 60px; } .hair_beard_3_holly { background-image: url(spritesmith-main-0.png); - background-position: -182px -1366px; + background-position: -1092px -1332px; width: 90px; height: 90px; } .customize-option.hair_beard_3_holly { background-image: url(spritesmith-main-0.png); - background-position: -207px -1381px; + background-position: -1117px -1347px; width: 60px; height: 60px; } .hair_beard_3_hollygreen { background-image: url(spritesmith-main-0.png); - background-position: -91px -1366px; + background-position: -1001px -1332px; width: 90px; height: 90px; } .customize-option.hair_beard_3_hollygreen { background-image: url(spritesmith-main-0.png); - background-position: -116px -1381px; + background-position: -1026px -1347px; width: 60px; height: 60px; } .hair_beard_3_midnight { background-image: url(spritesmith-main-0.png); - background-position: 0px -1366px; + background-position: -910px -1332px; width: 90px; height: 90px; } .customize-option.hair_beard_3_midnight { background-image: url(spritesmith-main-0.png); - background-position: -25px -1381px; + background-position: -935px -1347px; width: 60px; height: 60px; } .hair_beard_3_pblue { background-image: url(spritesmith-main-0.png); - background-position: -1415px -1274px; + background-position: -819px -1332px; width: 90px; height: 90px; } .customize-option.hair_beard_3_pblue { background-image: url(spritesmith-main-0.png); - background-position: -1440px -1289px; + background-position: -844px -1347px; width: 60px; height: 60px; } .hair_beard_3_peppermint { background-image: url(spritesmith-main-0.png); - background-position: -1415px -1183px; + background-position: -728px -1332px; width: 90px; height: 90px; } .customize-option.hair_beard_3_peppermint { background-image: url(spritesmith-main-0.png); - background-position: -1440px -1198px; + background-position: -753px -1347px; width: 60px; height: 60px; } .hair_beard_3_pgreen { background-image: url(spritesmith-main-0.png); - background-position: -1415px -1092px; + background-position: -637px -1332px; width: 90px; height: 90px; } .customize-option.hair_beard_3_pgreen { background-image: url(spritesmith-main-0.png); - background-position: -1440px -1107px; + background-position: -662px -1347px; width: 60px; height: 60px; } .hair_beard_3_porange { background-image: url(spritesmith-main-0.png); - background-position: -1415px -1001px; + background-position: -546px -1332px; width: 90px; height: 90px; } .customize-option.hair_beard_3_porange { background-image: url(spritesmith-main-0.png); - background-position: -1440px -1016px; + background-position: -571px -1347px; width: 60px; height: 60px; } .hair_beard_3_ppink { background-image: url(spritesmith-main-0.png); - background-position: -1415px -910px; + background-position: -455px -1332px; width: 90px; height: 90px; } .customize-option.hair_beard_3_ppink { background-image: url(spritesmith-main-0.png); - background-position: -1440px -925px; + background-position: -480px -1347px; width: 60px; height: 60px; } .hair_beard_3_ppurple { background-image: url(spritesmith-main-0.png); - background-position: -1415px -819px; + background-position: -364px -1332px; width: 90px; height: 90px; } .customize-option.hair_beard_3_ppurple { background-image: url(spritesmith-main-0.png); - background-position: -1440px -834px; + background-position: -389px -1347px; width: 60px; height: 60px; } .hair_beard_3_pumpkin { background-image: url(spritesmith-main-0.png); - background-position: -1415px -728px; + background-position: -273px -1332px; width: 90px; height: 90px; } .customize-option.hair_beard_3_pumpkin { background-image: url(spritesmith-main-0.png); - background-position: -1440px -743px; + background-position: -298px -1347px; width: 60px; height: 60px; } .hair_beard_3_purple { background-image: url(spritesmith-main-0.png); - background-position: -1415px -637px; + background-position: -182px -1332px; width: 90px; height: 90px; } .customize-option.hair_beard_3_purple { background-image: url(spritesmith-main-0.png); - background-position: -1440px -652px; + background-position: -207px -1347px; width: 60px; height: 60px; } .hair_beard_3_pyellow { background-image: url(spritesmith-main-0.png); - background-position: -1415px -546px; + background-position: -91px -1332px; width: 90px; height: 90px; } .customize-option.hair_beard_3_pyellow { background-image: url(spritesmith-main-0.png); - background-position: -1440px -561px; + background-position: -116px -1347px; width: 60px; height: 60px; } .hair_beard_3_rainbow { background-image: url(spritesmith-main-0.png); - background-position: -1415px -455px; + background-position: 0px -1332px; width: 90px; height: 90px; } .customize-option.hair_beard_3_rainbow { background-image: url(spritesmith-main-0.png); - background-position: -1440px -470px; + background-position: -25px -1347px; width: 60px; height: 60px; } .hair_beard_3_red { background-image: url(spritesmith-main-0.png); - background-position: -1415px -364px; + background-position: -1415px -1183px; width: 90px; height: 90px; } .customize-option.hair_beard_3_red { background-image: url(spritesmith-main-0.png); - background-position: -1440px -379px; + background-position: -1440px -1198px; width: 60px; height: 60px; } .hair_beard_3_snowy { background-image: url(spritesmith-main-0.png); - background-position: -1415px -273px; + background-position: -1415px -1092px; width: 90px; height: 90px; } .customize-option.hair_beard_3_snowy { background-image: url(spritesmith-main-0.png); - background-position: -1440px -288px; + background-position: -1440px -1107px; width: 60px; height: 60px; } .hair_beard_3_white { background-image: url(spritesmith-main-0.png); - background-position: -1415px -91px; + background-position: -1415px -910px; width: 90px; height: 90px; } .customize-option.hair_beard_3_white { background-image: url(spritesmith-main-0.png); - background-position: -1440px -106px; + background-position: -1440px -925px; width: 60px; height: 60px; } .hair_beard_3_winternight { background-image: url(spritesmith-main-0.png); - background-position: -1415px 0px; + background-position: -1415px -819px; width: 90px; height: 90px; } .customize-option.hair_beard_3_winternight { background-image: url(spritesmith-main-0.png); - background-position: -1440px -15px; + background-position: -1440px -834px; width: 60px; height: 60px; } .hair_beard_3_winterstar { background-image: url(spritesmith-main-0.png); - background-position: -1274px -1275px; + background-position: -1415px -728px; width: 90px; height: 90px; } .customize-option.hair_beard_3_winterstar { background-image: url(spritesmith-main-0.png); - background-position: -1299px -1290px; + background-position: -1440px -743px; width: 60px; height: 60px; } .hair_beard_3_yellow { background-image: url(spritesmith-main-0.png); - background-position: -1183px -1275px; + background-position: -1415px -637px; width: 90px; height: 90px; } .customize-option.hair_beard_3_yellow { background-image: url(spritesmith-main-0.png); - background-position: -1208px -1290px; + background-position: -1440px -652px; width: 60px; height: 60px; } .hair_beard_3_zombie { background-image: url(spritesmith-main-0.png); - background-position: -1092px -1275px; + background-position: -1415px -546px; width: 90px; height: 90px; } .customize-option.hair_beard_3_zombie { background-image: url(spritesmith-main-0.png); - background-position: -1117px -1290px; + background-position: -1440px -561px; width: 60px; height: 60px; } .hair_mustache_1_aurora { background-image: url(spritesmith-main-0.png); - background-position: -1001px -1275px; + background-position: -1415px -455px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_aurora { background-image: url(spritesmith-main-0.png); - background-position: -1026px -1290px; + background-position: -1440px -470px; width: 60px; height: 60px; } .hair_mustache_1_black { background-image: url(spritesmith-main-0.png); - background-position: -910px -1275px; + background-position: -1415px -364px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_black { background-image: url(spritesmith-main-0.png); - background-position: -935px -1290px; + background-position: -1440px -379px; width: 60px; height: 60px; } .hair_mustache_1_blond { background-image: url(spritesmith-main-0.png); - background-position: -819px -1275px; + background-position: -1415px -273px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_blond { background-image: url(spritesmith-main-0.png); - background-position: -844px -1290px; + background-position: -1440px -288px; width: 60px; height: 60px; } .hair_mustache_1_blue { background-image: url(spritesmith-main-0.png); - background-position: -728px -1275px; + background-position: -1415px -182px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_blue { background-image: url(spritesmith-main-0.png); - background-position: -753px -1290px; + background-position: -1440px -197px; width: 60px; height: 60px; } .hair_mustache_1_brown { background-image: url(spritesmith-main-0.png); - background-position: -637px -1275px; + background-position: -1415px -91px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_brown { background-image: url(spritesmith-main-0.png); - background-position: -662px -1290px; + background-position: -1440px -106px; width: 60px; height: 60px; } .hair_mustache_1_candycane { background-image: url(spritesmith-main-0.png); - background-position: -546px -1275px; + background-position: -1415px 0px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_candycane { background-image: url(spritesmith-main-0.png); - background-position: -571px -1290px; + background-position: -1440px -15px; width: 60px; height: 60px; } .hair_mustache_1_candycorn { background-image: url(spritesmith-main-0.png); - background-position: -455px -1275px; + background-position: -1324px -1184px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_candycorn { background-image: url(spritesmith-main-0.png); - background-position: -480px -1290px; + background-position: -1349px -1199px; width: 60px; height: 60px; } .hair_mustache_1_festive { background-image: url(spritesmith-main-0.png); - background-position: -364px -1275px; + background-position: -1233px -1184px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_festive { background-image: url(spritesmith-main-0.png); - background-position: -389px -1290px; + background-position: -1258px -1199px; width: 60px; height: 60px; } .hair_mustache_1_frost { background-image: url(spritesmith-main-0.png); - background-position: -273px -1275px; + background-position: -1142px -1184px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_frost { background-image: url(spritesmith-main-0.png); - background-position: -298px -1290px; + background-position: -1167px -1199px; width: 60px; height: 60px; } .hair_mustache_1_ghostwhite { background-image: url(spritesmith-main-0.png); - background-position: -182px -1275px; + background-position: -1051px -1184px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_ghostwhite { background-image: url(spritesmith-main-0.png); - background-position: -207px -1290px; + background-position: -1076px -1199px; width: 60px; height: 60px; } .hair_mustache_1_green { background-image: url(spritesmith-main-0.png); - background-position: -91px -1275px; + background-position: -960px -1184px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_green { background-image: url(spritesmith-main-0.png); - background-position: -116px -1290px; + background-position: -985px -1199px; width: 60px; height: 60px; } .hair_mustache_1_halloween { background-image: url(spritesmith-main-0.png); - background-position: 0px -1275px; + background-position: -869px -1184px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_halloween { background-image: url(spritesmith-main-0.png); - background-position: -25px -1290px; + background-position: -894px -1199px; width: 60px; height: 60px; } .hair_mustache_1_holly { background-image: url(spritesmith-main-0.png); - background-position: -1274px -1184px; + background-position: -778px -1184px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_holly { background-image: url(spritesmith-main-0.png); - background-position: -1299px -1199px; + background-position: -803px -1199px; width: 60px; height: 60px; } .hair_mustache_1_hollygreen { background-image: url(spritesmith-main-0.png); - background-position: -1183px -1184px; + background-position: -687px -1184px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_hollygreen { background-image: url(spritesmith-main-0.png); - background-position: -1208px -1199px; + background-position: -712px -1199px; width: 60px; height: 60px; } .hair_mustache_1_midnight { background-image: url(spritesmith-main-0.png); - background-position: -1092px -1184px; + background-position: -596px -1184px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_midnight { background-image: url(spritesmith-main-0.png); - background-position: -1117px -1199px; + background-position: -621px -1199px; width: 60px; height: 60px; } .hair_mustache_1_pblue { background-image: url(spritesmith-main-0.png); - background-position: -1001px -1184px; + background-position: -505px -1184px; width: 90px; height: 90px; } .customize-option.hair_mustache_1_pblue { background-image: url(spritesmith-main-0.png); - background-position: -1026px -1199px; - width: 60px; - height: 60px; -} -.hair_mustache_1_peppermint { - background-image: url(spritesmith-main-0.png); - background-position: -910px -1184px; - width: 90px; - height: 90px; -} -.customize-option.hair_mustache_1_peppermint { - background-image: url(spritesmith-main-0.png); - background-position: -935px -1199px; - width: 60px; - height: 60px; -} -.hair_mustache_1_pgreen { - background-image: url(spritesmith-main-0.png); - background-position: -819px -1184px; - width: 90px; - height: 90px; -} -.customize-option.hair_mustache_1_pgreen { - background-image: url(spritesmith-main-0.png); - background-position: -844px -1199px; - width: 60px; - height: 60px; -} -.hair_mustache_1_porange { - background-image: url(spritesmith-main-0.png); - background-position: -728px -1184px; - width: 90px; - height: 90px; -} -.customize-option.hair_mustache_1_porange { - background-image: url(spritesmith-main-0.png); - background-position: -753px -1199px; - width: 60px; - height: 60px; -} -.hair_mustache_1_ppink { - background-image: url(spritesmith-main-0.png); - background-position: -637px -1184px; - width: 90px; - height: 90px; -} -.customize-option.hair_mustache_1_ppink { - background-image: url(spritesmith-main-0.png); - background-position: -662px -1199px; - width: 60px; - height: 60px; -} -.hair_mustache_1_ppurple { - background-image: url(spritesmith-main-0.png); - background-position: -546px -1184px; - width: 90px; - height: 90px; -} -.customize-option.hair_mustache_1_ppurple { - background-image: url(spritesmith-main-0.png); - background-position: -571px -1199px; - width: 60px; - height: 60px; -} -.hair_mustache_1_pumpkin { - background-image: url(spritesmith-main-0.png); - background-position: -455px -1184px; - width: 90px; - height: 90px; -} -.customize-option.hair_mustache_1_pumpkin { - background-image: url(spritesmith-main-0.png); - background-position: -480px -1199px; - width: 60px; - height: 60px; -} -.hair_mustache_1_purple { - background-image: url(spritesmith-main-0.png); - background-position: -364px -1184px; - width: 90px; - height: 90px; -} -.customize-option.hair_mustache_1_purple { - background-image: url(spritesmith-main-0.png); - background-position: -389px -1199px; + background-position: -530px -1199px; width: 60px; height: 60px; } diff --git a/common/dist/sprites/spritesmith-main-0.png b/common/dist/sprites/spritesmith-main-0.png index 79bf02013f..8c63600322 100644 Binary files a/common/dist/sprites/spritesmith-main-0.png and b/common/dist/sprites/spritesmith-main-0.png differ diff --git a/common/dist/sprites/spritesmith-main-1.css b/common/dist/sprites/spritesmith-main-1.css index 3ad1e3eed8..ba310bb302 100644 --- a/common/dist/sprites/spritesmith-main-1.css +++ b/common/dist/sprites/spritesmith-main-1.css @@ -1,519 +1,603 @@ .hair_mustache_1_TRUred { - background-image: url(spritesmith-main-1.png); - background-position: -182px 0px; - width: 90px; - height: 90px; -} -.customize-option.hair_mustache_1_TRUred { - background-image: url(spritesmith-main-1.png); - background-position: -207px -15px; - width: 60px; - height: 60px; -} -.hair_mustache_1_pyellow { - background-image: url(spritesmith-main-1.png); - background-position: -91px 0px; - width: 90px; - height: 90px; -} -.customize-option.hair_mustache_1_pyellow { - background-image: url(spritesmith-main-1.png); - background-position: -116px -15px; - width: 60px; - height: 60px; -} -.hair_mustache_1_rainbow { - background-image: url(spritesmith-main-1.png); - background-position: -910px -1092px; - width: 90px; - height: 90px; -} -.customize-option.hair_mustache_1_rainbow { - background-image: url(spritesmith-main-1.png); - background-position: -935px -1107px; - width: 60px; - height: 60px; -} -.hair_mustache_1_red { - background-image: url(spritesmith-main-1.png); - background-position: 0px -91px; - width: 90px; - height: 90px; -} -.customize-option.hair_mustache_1_red { - background-image: url(spritesmith-main-1.png); - background-position: -25px -106px; - width: 60px; - height: 60px; -} -.hair_mustache_1_snowy { - background-image: url(spritesmith-main-1.png); - background-position: -91px -91px; - width: 90px; - height: 90px; -} -.customize-option.hair_mustache_1_snowy { - background-image: url(spritesmith-main-1.png); - background-position: -116px -106px; - width: 60px; - height: 60px; -} -.hair_mustache_1_white { - background-image: url(spritesmith-main-1.png); - background-position: -182px -91px; - width: 90px; - height: 90px; -} -.customize-option.hair_mustache_1_white { - background-image: url(spritesmith-main-1.png); - background-position: -207px -106px; - width: 60px; - height: 60px; -} -.hair_mustache_1_winternight { - background-image: url(spritesmith-main-1.png); - background-position: 0px -182px; - width: 90px; - height: 90px; -} -.customize-option.hair_mustache_1_winternight { - background-image: url(spritesmith-main-1.png); - background-position: -25px -197px; - width: 60px; - height: 60px; -} -.hair_mustache_1_winterstar { - background-image: url(spritesmith-main-1.png); - background-position: -91px -182px; - width: 90px; - height: 90px; -} -.customize-option.hair_mustache_1_winterstar { - background-image: url(spritesmith-main-1.png); - background-position: -116px -197px; - width: 60px; - height: 60px; -} -.hair_mustache_1_yellow { - background-image: url(spritesmith-main-1.png); - background-position: -182px -182px; - width: 90px; - height: 90px; -} -.customize-option.hair_mustache_1_yellow { - background-image: url(spritesmith-main-1.png); - background-position: -207px -197px; - width: 60px; - height: 60px; -} -.hair_mustache_1_zombie { - background-image: url(spritesmith-main-1.png); - background-position: -273px 0px; - width: 90px; - height: 90px; -} -.customize-option.hair_mustache_1_zombie { - background-image: url(spritesmith-main-1.png); - background-position: -298px -15px; - width: 60px; - height: 60px; -} -.hair_mustache_2_TRUred { - background-image: url(spritesmith-main-1.png); - background-position: -546px -91px; - width: 90px; - height: 90px; -} -.customize-option.hair_mustache_2_TRUred { - background-image: url(spritesmith-main-1.png); - background-position: -571px -106px; - width: 60px; - height: 60px; -} -.hair_mustache_2_aurora { - background-image: url(spritesmith-main-1.png); - background-position: -273px -91px; - width: 90px; - height: 90px; -} -.customize-option.hair_mustache_2_aurora { - background-image: url(spritesmith-main-1.png); - background-position: -298px -106px; - width: 60px; - height: 60px; -} -.hair_mustache_2_black { background-image: url(spritesmith-main-1.png); background-position: -273px -182px; width: 90px; height: 90px; } -.customize-option.hair_mustache_2_black { +.customize-option.hair_mustache_1_TRUred { background-image: url(spritesmith-main-1.png); background-position: -298px -197px; width: 60px; height: 60px; } -.hair_mustache_2_blond { +.hair_mustache_1_peppermint { + background-image: url(spritesmith-main-1.png); + background-position: -91px 0px; + width: 90px; + height: 90px; +} +.customize-option.hair_mustache_1_peppermint { + background-image: url(spritesmith-main-1.png); + background-position: -116px -15px; + width: 60px; + height: 60px; +} +.hair_mustache_1_pgreen { + background-image: url(spritesmith-main-1.png); + background-position: -910px -1092px; + width: 90px; + height: 90px; +} +.customize-option.hair_mustache_1_pgreen { + background-image: url(spritesmith-main-1.png); + background-position: -935px -1107px; + width: 60px; + height: 60px; +} +.hair_mustache_1_porange { + background-image: url(spritesmith-main-1.png); + background-position: 0px -91px; + width: 90px; + height: 90px; +} +.customize-option.hair_mustache_1_porange { + background-image: url(spritesmith-main-1.png); + background-position: -25px -106px; + width: 60px; + height: 60px; +} +.hair_mustache_1_ppink { + background-image: url(spritesmith-main-1.png); + background-position: -91px -91px; + width: 90px; + height: 90px; +} +.customize-option.hair_mustache_1_ppink { + background-image: url(spritesmith-main-1.png); + background-position: -116px -106px; + width: 60px; + height: 60px; +} +.hair_mustache_1_ppurple { + background-image: url(spritesmith-main-1.png); + background-position: -182px 0px; + width: 90px; + height: 90px; +} +.customize-option.hair_mustache_1_ppurple { + background-image: url(spritesmith-main-1.png); + background-position: -207px -15px; + width: 60px; + height: 60px; +} +.hair_mustache_1_pumpkin { + background-image: url(spritesmith-main-1.png); + background-position: -182px -91px; + width: 90px; + height: 90px; +} +.customize-option.hair_mustache_1_pumpkin { + background-image: url(spritesmith-main-1.png); + background-position: -207px -106px; + width: 60px; + height: 60px; +} +.hair_mustache_1_purple { + background-image: url(spritesmith-main-1.png); + background-position: 0px -182px; + width: 90px; + height: 90px; +} +.customize-option.hair_mustache_1_purple { + background-image: url(spritesmith-main-1.png); + background-position: -25px -197px; + width: 60px; + height: 60px; +} +.hair_mustache_1_pyellow { + background-image: url(spritesmith-main-1.png); + background-position: -91px -182px; + width: 90px; + height: 90px; +} +.customize-option.hair_mustache_1_pyellow { + background-image: url(spritesmith-main-1.png); + background-position: -116px -197px; + width: 60px; + height: 60px; +} +.hair_mustache_1_rainbow { + background-image: url(spritesmith-main-1.png); + background-position: -182px -182px; + width: 90px; + height: 90px; +} +.customize-option.hair_mustache_1_rainbow { + background-image: url(spritesmith-main-1.png); + background-position: -207px -197px; + width: 60px; + height: 60px; +} +.hair_mustache_1_red { + background-image: url(spritesmith-main-1.png); + background-position: -273px 0px; + width: 90px; + height: 90px; +} +.customize-option.hair_mustache_1_red { + background-image: url(spritesmith-main-1.png); + background-position: -298px -15px; + width: 60px; + height: 60px; +} +.hair_mustache_1_snowy { + background-image: url(spritesmith-main-1.png); + background-position: -273px -91px; + width: 90px; + height: 90px; +} +.customize-option.hair_mustache_1_snowy { + background-image: url(spritesmith-main-1.png); + background-position: -298px -106px; + width: 60px; + height: 60px; +} +.hair_mustache_1_white { background-image: url(spritesmith-main-1.png); background-position: 0px -273px; width: 90px; height: 90px; } -.customize-option.hair_mustache_2_blond { +.customize-option.hair_mustache_1_white { background-image: url(spritesmith-main-1.png); background-position: -25px -288px; width: 60px; height: 60px; } -.hair_mustache_2_blue { +.hair_mustache_1_winternight { background-image: url(spritesmith-main-1.png); background-position: -91px -273px; width: 90px; height: 90px; } -.customize-option.hair_mustache_2_blue { +.customize-option.hair_mustache_1_winternight { background-image: url(spritesmith-main-1.png); background-position: -116px -288px; width: 60px; height: 60px; } -.hair_mustache_2_brown { +.hair_mustache_1_winterstar { background-image: url(spritesmith-main-1.png); background-position: -182px -273px; width: 90px; height: 90px; } -.customize-option.hair_mustache_2_brown { +.customize-option.hair_mustache_1_winterstar { background-image: url(spritesmith-main-1.png); background-position: -207px -288px; width: 60px; height: 60px; } -.hair_mustache_2_candycane { +.hair_mustache_1_yellow { background-image: url(spritesmith-main-1.png); background-position: -273px -273px; width: 90px; height: 90px; } -.customize-option.hair_mustache_2_candycane { +.customize-option.hair_mustache_1_yellow { background-image: url(spritesmith-main-1.png); background-position: -298px -288px; width: 60px; height: 60px; } -.hair_mustache_2_candycorn { +.hair_mustache_1_zombie { background-image: url(spritesmith-main-1.png); background-position: -364px 0px; width: 90px; height: 90px; } -.customize-option.hair_mustache_2_candycorn { +.customize-option.hair_mustache_1_zombie { background-image: url(spritesmith-main-1.png); background-position: -389px -15px; width: 60px; height: 60px; } -.hair_mustache_2_festive { +.hair_mustache_2_TRUred { + background-image: url(spritesmith-main-1.png); + background-position: -182px -546px; + width: 90px; + height: 90px; +} +.customize-option.hair_mustache_2_TRUred { + background-image: url(spritesmith-main-1.png); + background-position: -207px -561px; + width: 60px; + height: 60px; +} +.hair_mustache_2_aurora { background-image: url(spritesmith-main-1.png); background-position: -364px -91px; width: 90px; height: 90px; } -.customize-option.hair_mustache_2_festive { +.customize-option.hair_mustache_2_aurora { background-image: url(spritesmith-main-1.png); background-position: -389px -106px; width: 60px; height: 60px; } -.hair_mustache_2_frost { +.hair_mustache_2_black { background-image: url(spritesmith-main-1.png); background-position: -364px -182px; width: 90px; height: 90px; } -.customize-option.hair_mustache_2_frost { +.customize-option.hair_mustache_2_black { background-image: url(spritesmith-main-1.png); background-position: -389px -197px; width: 60px; height: 60px; } -.hair_mustache_2_ghostwhite { +.hair_mustache_2_blond { background-image: url(spritesmith-main-1.png); background-position: -364px -273px; width: 90px; height: 90px; } -.customize-option.hair_mustache_2_ghostwhite { +.customize-option.hair_mustache_2_blond { background-image: url(spritesmith-main-1.png); background-position: -389px -288px; width: 60px; height: 60px; } -.hair_mustache_2_green { +.hair_mustache_2_blue { background-image: url(spritesmith-main-1.png); background-position: 0px -364px; width: 90px; height: 90px; } -.customize-option.hair_mustache_2_green { +.customize-option.hair_mustache_2_blue { background-image: url(spritesmith-main-1.png); background-position: -25px -379px; width: 60px; height: 60px; } -.hair_mustache_2_halloween { +.hair_mustache_2_brown { background-image: url(spritesmith-main-1.png); background-position: -91px -364px; width: 90px; height: 90px; } -.customize-option.hair_mustache_2_halloween { +.customize-option.hair_mustache_2_brown { background-image: url(spritesmith-main-1.png); background-position: -116px -379px; width: 60px; height: 60px; } -.hair_mustache_2_holly { +.hair_mustache_2_candycane { background-image: url(spritesmith-main-1.png); background-position: -182px -364px; width: 90px; height: 90px; } -.customize-option.hair_mustache_2_holly { +.customize-option.hair_mustache_2_candycane { background-image: url(spritesmith-main-1.png); background-position: -207px -379px; width: 60px; height: 60px; } -.hair_mustache_2_hollygreen { +.hair_mustache_2_candycorn { background-image: url(spritesmith-main-1.png); background-position: -273px -364px; width: 90px; height: 90px; } -.customize-option.hair_mustache_2_hollygreen { +.customize-option.hair_mustache_2_candycorn { background-image: url(spritesmith-main-1.png); background-position: -298px -379px; width: 60px; height: 60px; } -.hair_mustache_2_midnight { +.hair_mustache_2_festive { background-image: url(spritesmith-main-1.png); background-position: -364px -364px; width: 90px; height: 90px; } -.customize-option.hair_mustache_2_midnight { +.customize-option.hair_mustache_2_festive { background-image: url(spritesmith-main-1.png); background-position: -389px -379px; width: 60px; height: 60px; } -.hair_mustache_2_pblue { +.hair_mustache_2_frost { background-image: url(spritesmith-main-1.png); background-position: -455px 0px; width: 90px; height: 90px; } -.customize-option.hair_mustache_2_pblue { +.customize-option.hair_mustache_2_frost { background-image: url(spritesmith-main-1.png); background-position: -480px -15px; width: 60px; height: 60px; } -.hair_mustache_2_peppermint { +.hair_mustache_2_ghostwhite { background-image: url(spritesmith-main-1.png); background-position: -455px -91px; width: 90px; height: 90px; } -.customize-option.hair_mustache_2_peppermint { +.customize-option.hair_mustache_2_ghostwhite { background-image: url(spritesmith-main-1.png); background-position: -480px -106px; width: 60px; height: 60px; } -.hair_mustache_2_pgreen { +.hair_mustache_2_green { background-image: url(spritesmith-main-1.png); background-position: -455px -182px; width: 90px; height: 90px; } -.customize-option.hair_mustache_2_pgreen { +.customize-option.hair_mustache_2_green { background-image: url(spritesmith-main-1.png); background-position: -480px -197px; width: 60px; height: 60px; } -.hair_mustache_2_porange { +.hair_mustache_2_halloween { background-image: url(spritesmith-main-1.png); background-position: -455px -273px; width: 90px; height: 90px; } -.customize-option.hair_mustache_2_porange { +.customize-option.hair_mustache_2_halloween { background-image: url(spritesmith-main-1.png); background-position: -480px -288px; width: 60px; height: 60px; } -.hair_mustache_2_ppink { +.hair_mustache_2_holly { background-image: url(spritesmith-main-1.png); background-position: -455px -364px; width: 90px; height: 90px; } -.customize-option.hair_mustache_2_ppink { +.customize-option.hair_mustache_2_holly { background-image: url(spritesmith-main-1.png); background-position: -480px -379px; width: 60px; height: 60px; } -.hair_mustache_2_ppurple { +.hair_mustache_2_hollygreen { background-image: url(spritesmith-main-1.png); background-position: 0px -455px; width: 90px; height: 90px; } -.customize-option.hair_mustache_2_ppurple { +.customize-option.hair_mustache_2_hollygreen { background-image: url(spritesmith-main-1.png); background-position: -25px -470px; width: 60px; height: 60px; } -.hair_mustache_2_pumpkin { +.hair_mustache_2_midnight { background-image: url(spritesmith-main-1.png); background-position: -91px -455px; width: 90px; height: 90px; } -.customize-option.hair_mustache_2_pumpkin { +.customize-option.hair_mustache_2_midnight { background-image: url(spritesmith-main-1.png); background-position: -116px -470px; width: 60px; height: 60px; } -.hair_mustache_2_purple { +.hair_mustache_2_pblue { background-image: url(spritesmith-main-1.png); background-position: -182px -455px; width: 90px; height: 90px; } -.customize-option.hair_mustache_2_purple { +.customize-option.hair_mustache_2_pblue { background-image: url(spritesmith-main-1.png); background-position: -207px -470px; width: 60px; height: 60px; } -.hair_mustache_2_pyellow { +.hair_mustache_2_peppermint { background-image: url(spritesmith-main-1.png); background-position: -273px -455px; width: 90px; height: 90px; } -.customize-option.hair_mustache_2_pyellow { +.customize-option.hair_mustache_2_peppermint { background-image: url(spritesmith-main-1.png); background-position: -298px -470px; width: 60px; height: 60px; } -.hair_mustache_2_rainbow { +.hair_mustache_2_pgreen { background-image: url(spritesmith-main-1.png); background-position: -364px -455px; width: 90px; height: 90px; } -.customize-option.hair_mustache_2_rainbow { +.customize-option.hair_mustache_2_pgreen { background-image: url(spritesmith-main-1.png); background-position: -389px -470px; width: 60px; height: 60px; } -.hair_mustache_2_red { +.hair_mustache_2_porange { background-image: url(spritesmith-main-1.png); background-position: -455px -455px; width: 90px; height: 90px; } -.customize-option.hair_mustache_2_red { +.customize-option.hair_mustache_2_porange { background-image: url(spritesmith-main-1.png); background-position: -480px -470px; width: 60px; height: 60px; } -.hair_mustache_2_snowy { +.hair_mustache_2_ppink { background-image: url(spritesmith-main-1.png); background-position: -546px 0px; width: 90px; height: 90px; } -.customize-option.hair_mustache_2_snowy { +.customize-option.hair_mustache_2_ppink { background-image: url(spritesmith-main-1.png); background-position: -571px -15px; width: 60px; height: 60px; } -.hair_mustache_2_white { +.hair_mustache_2_ppurple { + background-image: url(spritesmith-main-1.png); + background-position: -546px -91px; + width: 90px; + height: 90px; +} +.customize-option.hair_mustache_2_ppurple { + background-image: url(spritesmith-main-1.png); + background-position: -571px -106px; + width: 60px; + height: 60px; +} +.hair_mustache_2_pumpkin { background-image: url(spritesmith-main-1.png); background-position: -546px -182px; width: 90px; height: 90px; } -.customize-option.hair_mustache_2_white { +.customize-option.hair_mustache_2_pumpkin { background-image: url(spritesmith-main-1.png); background-position: -571px -197px; width: 60px; height: 60px; } -.hair_mustache_2_winternight { +.hair_mustache_2_purple { background-image: url(spritesmith-main-1.png); background-position: -546px -273px; width: 90px; height: 90px; } -.customize-option.hair_mustache_2_winternight { +.customize-option.hair_mustache_2_purple { background-image: url(spritesmith-main-1.png); background-position: -571px -288px; width: 60px; height: 60px; } -.hair_mustache_2_winterstar { +.hair_mustache_2_pyellow { background-image: url(spritesmith-main-1.png); background-position: -546px -364px; width: 90px; height: 90px; } -.customize-option.hair_mustache_2_winterstar { +.customize-option.hair_mustache_2_pyellow { background-image: url(spritesmith-main-1.png); background-position: -571px -379px; width: 60px; height: 60px; } -.hair_mustache_2_yellow { +.hair_mustache_2_rainbow { background-image: url(spritesmith-main-1.png); background-position: -546px -455px; width: 90px; height: 90px; } -.customize-option.hair_mustache_2_yellow { +.customize-option.hair_mustache_2_rainbow { background-image: url(spritesmith-main-1.png); background-position: -571px -470px; width: 60px; height: 60px; } -.hair_mustache_2_zombie { +.hair_mustache_2_red { background-image: url(spritesmith-main-1.png); background-position: 0px -546px; width: 90px; height: 90px; } -.customize-option.hair_mustache_2_zombie { +.customize-option.hair_mustache_2_red { background-image: url(spritesmith-main-1.png); background-position: -25px -561px; width: 60px; height: 60px; } +.hair_mustache_2_snowy { + background-image: url(spritesmith-main-1.png); + background-position: -91px -546px; + width: 90px; + height: 90px; +} +.customize-option.hair_mustache_2_snowy { + background-image: url(spritesmith-main-1.png); + background-position: -116px -561px; + width: 60px; + height: 60px; +} +.hair_mustache_2_white { + background-image: url(spritesmith-main-1.png); + background-position: -273px -546px; + width: 90px; + height: 90px; +} +.customize-option.hair_mustache_2_white { + background-image: url(spritesmith-main-1.png); + background-position: -298px -561px; + width: 60px; + height: 60px; +} +.hair_mustache_2_winternight { + background-image: url(spritesmith-main-1.png); + background-position: -364px -546px; + width: 90px; + height: 90px; +} +.customize-option.hair_mustache_2_winternight { + background-image: url(spritesmith-main-1.png); + background-position: -389px -561px; + width: 60px; + height: 60px; +} +.hair_mustache_2_winterstar { + background-image: url(spritesmith-main-1.png); + background-position: -455px -546px; + width: 90px; + height: 90px; +} +.customize-option.hair_mustache_2_winterstar { + background-image: url(spritesmith-main-1.png); + background-position: -480px -561px; + width: 60px; + height: 60px; +} +.hair_mustache_2_yellow { + background-image: url(spritesmith-main-1.png); + background-position: -546px -546px; + width: 90px; + height: 90px; +} +.customize-option.hair_mustache_2_yellow { + background-image: url(spritesmith-main-1.png); + background-position: -571px -561px; + width: 60px; + height: 60px; +} +.hair_mustache_2_zombie { + background-image: url(spritesmith-main-1.png); + background-position: -637px 0px; + width: 90px; + height: 90px; +} +.customize-option.hair_mustache_2_zombie { + background-image: url(spritesmith-main-1.png); + background-position: -662px -15px; + width: 60px; + height: 60px; +} .button_chair_black { background-image: url(spritesmith-main-1.png); background-position: -1638px -487px; @@ -552,2891 +636,2807 @@ } .chair_black { background-image: url(spritesmith-main-1.png); - background-position: -637px 0px; + background-position: 0px -637px; width: 90px; height: 90px; } .chair_blue { background-image: url(spritesmith-main-1.png); - background-position: -637px -91px; + background-position: -91px -637px; width: 90px; height: 90px; } .chair_green { background-image: url(spritesmith-main-1.png); - background-position: -637px -182px; + background-position: -182px -637px; width: 90px; height: 90px; } .chair_pink { background-image: url(spritesmith-main-1.png); - background-position: -637px -273px; + background-position: -273px -637px; width: 90px; height: 90px; } .chair_red { background-image: url(spritesmith-main-1.png); - background-position: -637px -364px; + background-position: -364px -637px; width: 90px; height: 90px; } .chair_yellow { background-image: url(spritesmith-main-1.png); - background-position: -637px -455px; + background-position: -455px -637px; width: 90px; height: 90px; } .hair_flower_1 { background-image: url(spritesmith-main-1.png); - background-position: -637px -546px; + background-position: -546px -637px; width: 90px; height: 90px; } .customize-option.hair_flower_1 { background-image: url(spritesmith-main-1.png); - background-position: -662px -561px; + background-position: -571px -652px; width: 60px; height: 60px; } .hair_flower_2 { background-image: url(spritesmith-main-1.png); - background-position: 0px -637px; + background-position: -637px -637px; width: 90px; height: 90px; } .customize-option.hair_flower_2 { background-image: url(spritesmith-main-1.png); - background-position: -25px -652px; + background-position: -662px -652px; width: 60px; height: 60px; } .hair_flower_3 { background-image: url(spritesmith-main-1.png); - background-position: -91px -637px; + background-position: -728px 0px; width: 90px; height: 90px; } .customize-option.hair_flower_3 { background-image: url(spritesmith-main-1.png); - background-position: -116px -652px; + background-position: -753px -15px; width: 60px; height: 60px; } .hair_flower_4 { background-image: url(spritesmith-main-1.png); - background-position: -182px -637px; + background-position: -728px -91px; width: 90px; height: 90px; } .customize-option.hair_flower_4 { background-image: url(spritesmith-main-1.png); - background-position: -207px -652px; + background-position: -753px -106px; width: 60px; height: 60px; } .hair_flower_5 { background-image: url(spritesmith-main-1.png); - background-position: -273px -637px; + background-position: -728px -182px; width: 90px; height: 90px; } .customize-option.hair_flower_5 { background-image: url(spritesmith-main-1.png); - background-position: -298px -652px; + background-position: -753px -197px; width: 60px; height: 60px; } .hair_flower_6 { background-image: url(spritesmith-main-1.png); - background-position: -364px -637px; + background-position: -728px -273px; width: 90px; height: 90px; } .customize-option.hair_flower_6 { background-image: url(spritesmith-main-1.png); - background-position: -389px -652px; + background-position: -753px -288px; width: 60px; height: 60px; } .hair_bangs_1_TRUred { background-image: url(spritesmith-main-1.png); - background-position: -364px -819px; + background-position: -910px -91px; width: 90px; height: 90px; } .customize-option.hair_bangs_1_TRUred { background-image: url(spritesmith-main-1.png); - background-position: -389px -834px; + background-position: -935px -106px; width: 60px; height: 60px; } .hair_bangs_1_aurora { background-image: url(spritesmith-main-1.png); - background-position: -455px -637px; + background-position: -728px -364px; width: 90px; height: 90px; } .customize-option.hair_bangs_1_aurora { background-image: url(spritesmith-main-1.png); - background-position: -480px -652px; + background-position: -753px -379px; width: 60px; height: 60px; } .hair_bangs_1_black { background-image: url(spritesmith-main-1.png); - background-position: -546px -637px; + background-position: -728px -455px; width: 90px; height: 90px; } .customize-option.hair_bangs_1_black { background-image: url(spritesmith-main-1.png); - background-position: -571px -652px; + background-position: -753px -470px; width: 60px; height: 60px; } .hair_bangs_1_blond { background-image: url(spritesmith-main-1.png); - background-position: -637px -637px; + background-position: -728px -546px; width: 90px; height: 90px; } .customize-option.hair_bangs_1_blond { background-image: url(spritesmith-main-1.png); - background-position: -662px -652px; + background-position: -753px -561px; width: 60px; height: 60px; } .hair_bangs_1_blue { background-image: url(spritesmith-main-1.png); - background-position: -728px 0px; + background-position: -728px -637px; width: 90px; height: 90px; } .customize-option.hair_bangs_1_blue { background-image: url(spritesmith-main-1.png); - background-position: -753px -15px; + background-position: -753px -652px; width: 60px; height: 60px; } .hair_bangs_1_brown { background-image: url(spritesmith-main-1.png); - background-position: -728px -91px; + background-position: 0px -728px; width: 90px; height: 90px; } .customize-option.hair_bangs_1_brown { background-image: url(spritesmith-main-1.png); - background-position: -753px -106px; + background-position: -25px -743px; width: 60px; height: 60px; } .hair_bangs_1_candycane { background-image: url(spritesmith-main-1.png); - background-position: -728px -182px; + background-position: -91px -728px; width: 90px; height: 90px; } .customize-option.hair_bangs_1_candycane { background-image: url(spritesmith-main-1.png); - background-position: -753px -197px; + background-position: -116px -743px; width: 60px; height: 60px; } .hair_bangs_1_candycorn { background-image: url(spritesmith-main-1.png); - background-position: -728px -273px; + background-position: -182px -728px; width: 90px; height: 90px; } .customize-option.hair_bangs_1_candycorn { background-image: url(spritesmith-main-1.png); - background-position: -753px -288px; + background-position: -207px -743px; width: 60px; height: 60px; } .hair_bangs_1_festive { background-image: url(spritesmith-main-1.png); - background-position: -728px -364px; + background-position: -273px -728px; width: 90px; height: 90px; } .customize-option.hair_bangs_1_festive { background-image: url(spritesmith-main-1.png); - background-position: -753px -379px; + background-position: -298px -743px; width: 60px; height: 60px; } .hair_bangs_1_frost { background-image: url(spritesmith-main-1.png); - background-position: -728px -455px; + background-position: -364px -728px; width: 90px; height: 90px; } .customize-option.hair_bangs_1_frost { background-image: url(spritesmith-main-1.png); - background-position: -753px -470px; + background-position: -389px -743px; width: 60px; height: 60px; } .hair_bangs_1_ghostwhite { background-image: url(spritesmith-main-1.png); - background-position: -728px -546px; + background-position: -455px -728px; width: 90px; height: 90px; } .customize-option.hair_bangs_1_ghostwhite { background-image: url(spritesmith-main-1.png); - background-position: -753px -561px; + background-position: -480px -743px; width: 60px; height: 60px; } .hair_bangs_1_green { background-image: url(spritesmith-main-1.png); - background-position: -728px -637px; + background-position: -546px -728px; width: 90px; height: 90px; } .customize-option.hair_bangs_1_green { background-image: url(spritesmith-main-1.png); - background-position: -753px -652px; + background-position: -571px -743px; width: 60px; height: 60px; } .hair_bangs_1_halloween { background-image: url(spritesmith-main-1.png); - background-position: 0px -728px; + background-position: -637px -728px; width: 90px; height: 90px; } .customize-option.hair_bangs_1_halloween { background-image: url(spritesmith-main-1.png); - background-position: -25px -743px; + background-position: -662px -743px; width: 60px; height: 60px; } .hair_bangs_1_holly { background-image: url(spritesmith-main-1.png); - background-position: -91px -728px; + background-position: -728px -728px; width: 90px; height: 90px; } .customize-option.hair_bangs_1_holly { background-image: url(spritesmith-main-1.png); - background-position: -116px -743px; + background-position: -753px -743px; width: 60px; height: 60px; } .hair_bangs_1_hollygreen { background-image: url(spritesmith-main-1.png); - background-position: -182px -728px; + background-position: -819px 0px; width: 90px; height: 90px; } .customize-option.hair_bangs_1_hollygreen { background-image: url(spritesmith-main-1.png); - background-position: -207px -743px; + background-position: -844px -15px; width: 60px; height: 60px; } .hair_bangs_1_midnight { background-image: url(spritesmith-main-1.png); - background-position: -273px -728px; + background-position: -819px -91px; width: 90px; height: 90px; } .customize-option.hair_bangs_1_midnight { background-image: url(spritesmith-main-1.png); - background-position: -298px -743px; + background-position: -844px -106px; width: 60px; height: 60px; } .hair_bangs_1_pblue { background-image: url(spritesmith-main-1.png); - background-position: -364px -728px; + background-position: -819px -182px; width: 90px; height: 90px; } .customize-option.hair_bangs_1_pblue { background-image: url(spritesmith-main-1.png); - background-position: -389px -743px; + background-position: -844px -197px; width: 60px; height: 60px; } .hair_bangs_1_pblue2 { background-image: url(spritesmith-main-1.png); - background-position: -455px -728px; + background-position: -819px -273px; width: 90px; height: 90px; } .customize-option.hair_bangs_1_pblue2 { background-image: url(spritesmith-main-1.png); - background-position: -480px -743px; + background-position: -844px -288px; width: 60px; height: 60px; } .hair_bangs_1_peppermint { background-image: url(spritesmith-main-1.png); - background-position: -546px -728px; + background-position: -819px -364px; width: 90px; height: 90px; } .customize-option.hair_bangs_1_peppermint { background-image: url(spritesmith-main-1.png); - background-position: -571px -743px; + background-position: -844px -379px; width: 60px; height: 60px; } .hair_bangs_1_pgreen { background-image: url(spritesmith-main-1.png); - background-position: -637px -728px; + background-position: -819px -455px; width: 90px; height: 90px; } .customize-option.hair_bangs_1_pgreen { background-image: url(spritesmith-main-1.png); - background-position: -662px -743px; + background-position: -844px -470px; width: 60px; height: 60px; } .hair_bangs_1_pgreen2 { background-image: url(spritesmith-main-1.png); - background-position: -728px -728px; + background-position: -819px -546px; width: 90px; height: 90px; } .customize-option.hair_bangs_1_pgreen2 { background-image: url(spritesmith-main-1.png); - background-position: -753px -743px; + background-position: -844px -561px; width: 60px; height: 60px; } .hair_bangs_1_porange { background-image: url(spritesmith-main-1.png); - background-position: -819px 0px; + background-position: -819px -637px; width: 90px; height: 90px; } .customize-option.hair_bangs_1_porange { background-image: url(spritesmith-main-1.png); - background-position: -844px -15px; + background-position: -844px -652px; width: 60px; height: 60px; } .hair_bangs_1_porange2 { background-image: url(spritesmith-main-1.png); - background-position: -819px -91px; + background-position: -819px -728px; width: 90px; height: 90px; } .customize-option.hair_bangs_1_porange2 { background-image: url(spritesmith-main-1.png); - background-position: -844px -106px; + background-position: -844px -743px; width: 60px; height: 60px; } .hair_bangs_1_ppink { background-image: url(spritesmith-main-1.png); - background-position: -819px -182px; + background-position: 0px -819px; width: 90px; height: 90px; } .customize-option.hair_bangs_1_ppink { background-image: url(spritesmith-main-1.png); - background-position: -844px -197px; + background-position: -25px -834px; width: 60px; height: 60px; } .hair_bangs_1_ppink2 { background-image: url(spritesmith-main-1.png); - background-position: -819px -273px; + background-position: -91px -819px; width: 90px; height: 90px; } .customize-option.hair_bangs_1_ppink2 { background-image: url(spritesmith-main-1.png); - background-position: -844px -288px; + background-position: -116px -834px; width: 60px; height: 60px; } .hair_bangs_1_ppurple { background-image: url(spritesmith-main-1.png); - background-position: -819px -364px; + background-position: -182px -819px; width: 90px; height: 90px; } .customize-option.hair_bangs_1_ppurple { background-image: url(spritesmith-main-1.png); - background-position: -844px -379px; + background-position: -207px -834px; width: 60px; height: 60px; } .hair_bangs_1_ppurple2 { background-image: url(spritesmith-main-1.png); - background-position: -819px -455px; + background-position: -273px -819px; width: 90px; height: 90px; } .customize-option.hair_bangs_1_ppurple2 { background-image: url(spritesmith-main-1.png); - background-position: -844px -470px; + background-position: -298px -834px; width: 60px; height: 60px; } .hair_bangs_1_pumpkin { background-image: url(spritesmith-main-1.png); - background-position: -819px -546px; + background-position: -364px -819px; width: 90px; height: 90px; } .customize-option.hair_bangs_1_pumpkin { background-image: url(spritesmith-main-1.png); - background-position: -844px -561px; + background-position: -389px -834px; width: 60px; height: 60px; } .hair_bangs_1_purple { background-image: url(spritesmith-main-1.png); - background-position: -819px -637px; + background-position: -455px -819px; width: 90px; height: 90px; } .customize-option.hair_bangs_1_purple { background-image: url(spritesmith-main-1.png); - background-position: -844px -652px; + background-position: -480px -834px; width: 60px; height: 60px; } .hair_bangs_1_pyellow { background-image: url(spritesmith-main-1.png); - background-position: -819px -728px; + background-position: -546px -819px; width: 90px; height: 90px; } .customize-option.hair_bangs_1_pyellow { background-image: url(spritesmith-main-1.png); - background-position: -844px -743px; + background-position: -571px -834px; width: 60px; height: 60px; } .hair_bangs_1_pyellow2 { background-image: url(spritesmith-main-1.png); - background-position: 0px -819px; + background-position: -637px -819px; width: 90px; height: 90px; } .customize-option.hair_bangs_1_pyellow2 { background-image: url(spritesmith-main-1.png); - background-position: -25px -834px; + background-position: -662px -834px; width: 60px; height: 60px; } .hair_bangs_1_rainbow { background-image: url(spritesmith-main-1.png); - background-position: -91px -819px; + background-position: -728px -819px; width: 90px; height: 90px; } .customize-option.hair_bangs_1_rainbow { background-image: url(spritesmith-main-1.png); - background-position: -116px -834px; + background-position: -753px -834px; width: 60px; height: 60px; } .hair_bangs_1_red { background-image: url(spritesmith-main-1.png); - background-position: -182px -819px; + background-position: -819px -819px; width: 90px; height: 90px; } .customize-option.hair_bangs_1_red { background-image: url(spritesmith-main-1.png); - background-position: -207px -834px; + background-position: -844px -834px; width: 60px; height: 60px; } .hair_bangs_1_snowy { background-image: url(spritesmith-main-1.png); - background-position: -273px -819px; + background-position: -910px 0px; width: 90px; height: 90px; } .customize-option.hair_bangs_1_snowy { background-image: url(spritesmith-main-1.png); - background-position: -298px -834px; + background-position: -935px -15px; width: 60px; height: 60px; } .hair_bangs_1_white { background-image: url(spritesmith-main-1.png); - background-position: -455px -819px; + background-position: -910px -182px; width: 90px; height: 90px; } .customize-option.hair_bangs_1_white { background-image: url(spritesmith-main-1.png); - background-position: -480px -834px; + background-position: -935px -197px; width: 60px; height: 60px; } .hair_bangs_1_winternight { background-image: url(spritesmith-main-1.png); - background-position: -546px -819px; + background-position: -910px -273px; width: 90px; height: 90px; } .customize-option.hair_bangs_1_winternight { background-image: url(spritesmith-main-1.png); - background-position: -571px -834px; + background-position: -935px -288px; width: 60px; height: 60px; } .hair_bangs_1_winterstar { background-image: url(spritesmith-main-1.png); - background-position: -637px -819px; + background-position: -910px -364px; width: 90px; height: 90px; } .customize-option.hair_bangs_1_winterstar { background-image: url(spritesmith-main-1.png); - background-position: -662px -834px; + background-position: -935px -379px; width: 60px; height: 60px; } .hair_bangs_1_yellow { background-image: url(spritesmith-main-1.png); - background-position: -728px -819px; + background-position: -910px -455px; width: 90px; height: 90px; } .customize-option.hair_bangs_1_yellow { background-image: url(spritesmith-main-1.png); - background-position: -753px -834px; + background-position: -935px -470px; width: 60px; height: 60px; } .hair_bangs_1_zombie { background-image: url(spritesmith-main-1.png); - background-position: -819px -819px; + background-position: -910px -546px; width: 90px; height: 90px; } .customize-option.hair_bangs_1_zombie { background-image: url(spritesmith-main-1.png); - background-position: -844px -834px; + background-position: -935px -561px; width: 60px; height: 60px; } .hair_bangs_2_TRUred { background-image: url(spritesmith-main-1.png); - background-position: -91px -1001px; + background-position: -728px -1001px; width: 90px; height: 90px; } .customize-option.hair_bangs_2_TRUred { background-image: url(spritesmith-main-1.png); - background-position: -116px -1016px; + background-position: -753px -1016px; width: 60px; height: 60px; } .hair_bangs_2_aurora { background-image: url(spritesmith-main-1.png); - background-position: -910px 0px; + background-position: -910px -637px; width: 90px; height: 90px; } .customize-option.hair_bangs_2_aurora { background-image: url(spritesmith-main-1.png); - background-position: -935px -15px; + background-position: -935px -652px; width: 60px; height: 60px; } .hair_bangs_2_black { background-image: url(spritesmith-main-1.png); - background-position: -910px -91px; + background-position: -910px -728px; width: 90px; height: 90px; } .customize-option.hair_bangs_2_black { background-image: url(spritesmith-main-1.png); - background-position: -935px -106px; + background-position: -935px -743px; width: 60px; height: 60px; } .hair_bangs_2_blond { background-image: url(spritesmith-main-1.png); - background-position: -910px -182px; + background-position: -910px -819px; width: 90px; height: 90px; } .customize-option.hair_bangs_2_blond { background-image: url(spritesmith-main-1.png); - background-position: -935px -197px; + background-position: -935px -834px; width: 60px; height: 60px; } .hair_bangs_2_blue { background-image: url(spritesmith-main-1.png); - background-position: -910px -273px; + background-position: 0px -910px; width: 90px; height: 90px; } .customize-option.hair_bangs_2_blue { background-image: url(spritesmith-main-1.png); - background-position: -935px -288px; + background-position: -25px -925px; width: 60px; height: 60px; } .hair_bangs_2_brown { background-image: url(spritesmith-main-1.png); - background-position: -910px -364px; + background-position: -91px -910px; width: 90px; height: 90px; } .customize-option.hair_bangs_2_brown { background-image: url(spritesmith-main-1.png); - background-position: -935px -379px; + background-position: -116px -925px; width: 60px; height: 60px; } .hair_bangs_2_candycane { background-image: url(spritesmith-main-1.png); - background-position: -910px -455px; + background-position: -182px -910px; width: 90px; height: 90px; } .customize-option.hair_bangs_2_candycane { background-image: url(spritesmith-main-1.png); - background-position: -935px -470px; + background-position: -207px -925px; width: 60px; height: 60px; } .hair_bangs_2_candycorn { background-image: url(spritesmith-main-1.png); - background-position: -910px -546px; + background-position: -273px -910px; width: 90px; height: 90px; } .customize-option.hair_bangs_2_candycorn { background-image: url(spritesmith-main-1.png); - background-position: -935px -561px; + background-position: -298px -925px; width: 60px; height: 60px; } .hair_bangs_2_festive { background-image: url(spritesmith-main-1.png); - background-position: -910px -637px; + background-position: -364px -910px; width: 90px; height: 90px; } .customize-option.hair_bangs_2_festive { background-image: url(spritesmith-main-1.png); - background-position: -935px -652px; + background-position: -389px -925px; width: 60px; height: 60px; } .hair_bangs_2_frost { background-image: url(spritesmith-main-1.png); - background-position: -910px -728px; + background-position: -455px -910px; width: 90px; height: 90px; } .customize-option.hair_bangs_2_frost { background-image: url(spritesmith-main-1.png); - background-position: -935px -743px; + background-position: -480px -925px; width: 60px; height: 60px; } .hair_bangs_2_ghostwhite { background-image: url(spritesmith-main-1.png); - background-position: -910px -819px; + background-position: -546px -910px; width: 90px; height: 90px; } .customize-option.hair_bangs_2_ghostwhite { background-image: url(spritesmith-main-1.png); - background-position: -935px -834px; + background-position: -571px -925px; width: 60px; height: 60px; } .hair_bangs_2_green { background-image: url(spritesmith-main-1.png); - background-position: 0px -910px; + background-position: -637px -910px; width: 90px; height: 90px; } .customize-option.hair_bangs_2_green { background-image: url(spritesmith-main-1.png); - background-position: -25px -925px; + background-position: -662px -925px; width: 60px; height: 60px; } .hair_bangs_2_halloween { background-image: url(spritesmith-main-1.png); - background-position: -91px -910px; + background-position: -728px -910px; width: 90px; height: 90px; } .customize-option.hair_bangs_2_halloween { background-image: url(spritesmith-main-1.png); - background-position: -116px -925px; + background-position: -753px -925px; width: 60px; height: 60px; } .hair_bangs_2_holly { background-image: url(spritesmith-main-1.png); - background-position: -182px -910px; + background-position: -819px -910px; width: 90px; height: 90px; } .customize-option.hair_bangs_2_holly { background-image: url(spritesmith-main-1.png); - background-position: -207px -925px; + background-position: -844px -925px; width: 60px; height: 60px; } .hair_bangs_2_hollygreen { background-image: url(spritesmith-main-1.png); - background-position: -273px -910px; + background-position: -910px -910px; width: 90px; height: 90px; } .customize-option.hair_bangs_2_hollygreen { background-image: url(spritesmith-main-1.png); - background-position: -298px -925px; + background-position: -935px -925px; width: 60px; height: 60px; } .hair_bangs_2_midnight { background-image: url(spritesmith-main-1.png); - background-position: -364px -910px; + background-position: -1001px 0px; width: 90px; height: 90px; } .customize-option.hair_bangs_2_midnight { background-image: url(spritesmith-main-1.png); - background-position: -389px -925px; + background-position: -1026px -15px; width: 60px; height: 60px; } .hair_bangs_2_pblue { background-image: url(spritesmith-main-1.png); - background-position: -455px -910px; + background-position: -1001px -91px; width: 90px; height: 90px; } .customize-option.hair_bangs_2_pblue { background-image: url(spritesmith-main-1.png); - background-position: -480px -925px; + background-position: -1026px -106px; width: 60px; height: 60px; } .hair_bangs_2_pblue2 { background-image: url(spritesmith-main-1.png); - background-position: -546px -910px; + background-position: -1001px -182px; width: 90px; height: 90px; } .customize-option.hair_bangs_2_pblue2 { background-image: url(spritesmith-main-1.png); - background-position: -571px -925px; + background-position: -1026px -197px; width: 60px; height: 60px; } .hair_bangs_2_peppermint { background-image: url(spritesmith-main-1.png); - background-position: -637px -910px; + background-position: -1001px -273px; width: 90px; height: 90px; } .customize-option.hair_bangs_2_peppermint { background-image: url(spritesmith-main-1.png); - background-position: -662px -925px; + background-position: -1026px -288px; width: 60px; height: 60px; } .hair_bangs_2_pgreen { background-image: url(spritesmith-main-1.png); - background-position: -728px -910px; + background-position: -1001px -364px; width: 90px; height: 90px; } .customize-option.hair_bangs_2_pgreen { background-image: url(spritesmith-main-1.png); - background-position: -753px -925px; + background-position: -1026px -379px; width: 60px; height: 60px; } .hair_bangs_2_pgreen2 { background-image: url(spritesmith-main-1.png); - background-position: -819px -910px; + background-position: -1001px -455px; width: 90px; height: 90px; } .customize-option.hair_bangs_2_pgreen2 { background-image: url(spritesmith-main-1.png); - background-position: -844px -925px; + background-position: -1026px -470px; width: 60px; height: 60px; } .hair_bangs_2_porange { background-image: url(spritesmith-main-1.png); - background-position: -910px -910px; + background-position: -1001px -546px; width: 90px; height: 90px; } .customize-option.hair_bangs_2_porange { background-image: url(spritesmith-main-1.png); - background-position: -935px -925px; + background-position: -1026px -561px; width: 60px; height: 60px; } .hair_bangs_2_porange2 { background-image: url(spritesmith-main-1.png); - background-position: -1001px 0px; + background-position: -1001px -637px; width: 90px; height: 90px; } .customize-option.hair_bangs_2_porange2 { background-image: url(spritesmith-main-1.png); - background-position: -1026px -15px; + background-position: -1026px -652px; width: 60px; height: 60px; } .hair_bangs_2_ppink { background-image: url(spritesmith-main-1.png); - background-position: -1001px -91px; + background-position: -1001px -728px; width: 90px; height: 90px; } .customize-option.hair_bangs_2_ppink { background-image: url(spritesmith-main-1.png); - background-position: -1026px -106px; + background-position: -1026px -743px; width: 60px; height: 60px; } .hair_bangs_2_ppink2 { background-image: url(spritesmith-main-1.png); - background-position: -1001px -182px; + background-position: -1001px -819px; width: 90px; height: 90px; } .customize-option.hair_bangs_2_ppink2 { background-image: url(spritesmith-main-1.png); - background-position: -1026px -197px; + background-position: -1026px -834px; width: 60px; height: 60px; } .hair_bangs_2_ppurple { background-image: url(spritesmith-main-1.png); - background-position: -1001px -273px; + background-position: -1001px -910px; width: 90px; height: 90px; } .customize-option.hair_bangs_2_ppurple { background-image: url(spritesmith-main-1.png); - background-position: -1026px -288px; + background-position: -1026px -925px; width: 60px; height: 60px; } .hair_bangs_2_ppurple2 { background-image: url(spritesmith-main-1.png); - background-position: -1001px -364px; + background-position: 0px -1001px; width: 90px; height: 90px; } .customize-option.hair_bangs_2_ppurple2 { background-image: url(spritesmith-main-1.png); - background-position: -1026px -379px; + background-position: -25px -1016px; width: 60px; height: 60px; } .hair_bangs_2_pumpkin { background-image: url(spritesmith-main-1.png); - background-position: -1001px -455px; + background-position: -91px -1001px; width: 90px; height: 90px; } .customize-option.hair_bangs_2_pumpkin { background-image: url(spritesmith-main-1.png); - background-position: -1026px -470px; + background-position: -116px -1016px; width: 60px; height: 60px; } .hair_bangs_2_purple { background-image: url(spritesmith-main-1.png); - background-position: -1001px -546px; + background-position: -182px -1001px; width: 90px; height: 90px; } .customize-option.hair_bangs_2_purple { background-image: url(spritesmith-main-1.png); - background-position: -1026px -561px; + background-position: -207px -1016px; width: 60px; height: 60px; } .hair_bangs_2_pyellow { background-image: url(spritesmith-main-1.png); - background-position: -1001px -637px; + background-position: -273px -1001px; width: 90px; height: 90px; } .customize-option.hair_bangs_2_pyellow { background-image: url(spritesmith-main-1.png); - background-position: -1026px -652px; + background-position: -298px -1016px; width: 60px; height: 60px; } .hair_bangs_2_pyellow2 { background-image: url(spritesmith-main-1.png); - background-position: -1001px -728px; + background-position: -364px -1001px; width: 90px; height: 90px; } .customize-option.hair_bangs_2_pyellow2 { background-image: url(spritesmith-main-1.png); - background-position: -1026px -743px; + background-position: -389px -1016px; width: 60px; height: 60px; } .hair_bangs_2_rainbow { background-image: url(spritesmith-main-1.png); - background-position: -1001px -819px; + background-position: -455px -1001px; width: 90px; height: 90px; } .customize-option.hair_bangs_2_rainbow { background-image: url(spritesmith-main-1.png); - background-position: -1026px -834px; + background-position: -480px -1016px; width: 60px; height: 60px; } .hair_bangs_2_red { background-image: url(spritesmith-main-1.png); - background-position: -1001px -910px; + background-position: -546px -1001px; width: 90px; height: 90px; } .customize-option.hair_bangs_2_red { background-image: url(spritesmith-main-1.png); - background-position: -1026px -925px; + background-position: -571px -1016px; width: 60px; height: 60px; } .hair_bangs_2_snowy { background-image: url(spritesmith-main-1.png); - background-position: 0px -1001px; + background-position: -637px -1001px; width: 90px; height: 90px; } .customize-option.hair_bangs_2_snowy { background-image: url(spritesmith-main-1.png); - background-position: -25px -1016px; + background-position: -662px -1016px; width: 60px; height: 60px; } .hair_bangs_2_white { background-image: url(spritesmith-main-1.png); - background-position: -182px -1001px; + background-position: -819px -1001px; width: 90px; height: 90px; } .customize-option.hair_bangs_2_white { background-image: url(spritesmith-main-1.png); - background-position: -207px -1016px; + background-position: -844px -1016px; width: 60px; height: 60px; } .hair_bangs_2_winternight { background-image: url(spritesmith-main-1.png); - background-position: -273px -1001px; + background-position: -910px -1001px; width: 90px; height: 90px; } .customize-option.hair_bangs_2_winternight { background-image: url(spritesmith-main-1.png); - background-position: -298px -1016px; + background-position: -935px -1016px; width: 60px; height: 60px; } .hair_bangs_2_winterstar { background-image: url(spritesmith-main-1.png); - background-position: -364px -1001px; + background-position: -1001px -1001px; width: 90px; height: 90px; } .customize-option.hair_bangs_2_winterstar { background-image: url(spritesmith-main-1.png); - background-position: -389px -1016px; + background-position: -1026px -1016px; width: 60px; height: 60px; } .hair_bangs_2_yellow { background-image: url(spritesmith-main-1.png); - background-position: -455px -1001px; + background-position: -1092px 0px; width: 90px; height: 90px; } .customize-option.hair_bangs_2_yellow { background-image: url(spritesmith-main-1.png); - background-position: -480px -1016px; + background-position: -1117px -15px; width: 60px; height: 60px; } .hair_bangs_2_zombie { background-image: url(spritesmith-main-1.png); - background-position: -546px -1001px; + background-position: -1092px -91px; width: 90px; height: 90px; } .customize-option.hair_bangs_2_zombie { background-image: url(spritesmith-main-1.png); - background-position: -571px -1016px; + background-position: -1117px -106px; width: 60px; height: 60px; } .hair_bangs_3_TRUred { background-image: url(spritesmith-main-1.png); - background-position: -1183px -273px; + background-position: -1183px -910px; width: 90px; height: 90px; } .customize-option.hair_bangs_3_TRUred { background-image: url(spritesmith-main-1.png); - background-position: -1208px -288px; + background-position: -1208px -925px; width: 60px; height: 60px; } .hair_bangs_3_aurora { background-image: url(spritesmith-main-1.png); - background-position: -637px -1001px; + background-position: -1092px -182px; width: 90px; height: 90px; } .customize-option.hair_bangs_3_aurora { background-image: url(spritesmith-main-1.png); - background-position: -662px -1016px; + background-position: -1117px -197px; width: 60px; height: 60px; } .hair_bangs_3_black { background-image: url(spritesmith-main-1.png); - background-position: -728px -1001px; + background-position: -1092px -273px; width: 90px; height: 90px; } .customize-option.hair_bangs_3_black { background-image: url(spritesmith-main-1.png); - background-position: -753px -1016px; + background-position: -1117px -288px; width: 60px; height: 60px; } .hair_bangs_3_blond { background-image: url(spritesmith-main-1.png); - background-position: -819px -1001px; + background-position: -1092px -364px; width: 90px; height: 90px; } .customize-option.hair_bangs_3_blond { background-image: url(spritesmith-main-1.png); - background-position: -844px -1016px; + background-position: -1117px -379px; width: 60px; height: 60px; } .hair_bangs_3_blue { background-image: url(spritesmith-main-1.png); - background-position: -910px -1001px; + background-position: -1092px -455px; width: 90px; height: 90px; } .customize-option.hair_bangs_3_blue { background-image: url(spritesmith-main-1.png); - background-position: -935px -1016px; + background-position: -1117px -470px; width: 60px; height: 60px; } .hair_bangs_3_brown { background-image: url(spritesmith-main-1.png); - background-position: -1001px -1001px; + background-position: -1092px -546px; width: 90px; height: 90px; } .customize-option.hair_bangs_3_brown { background-image: url(spritesmith-main-1.png); - background-position: -1026px -1016px; + background-position: -1117px -561px; width: 60px; height: 60px; } .hair_bangs_3_candycane { background-image: url(spritesmith-main-1.png); - background-position: -1092px 0px; + background-position: -1092px -637px; width: 90px; height: 90px; } .customize-option.hair_bangs_3_candycane { background-image: url(spritesmith-main-1.png); - background-position: -1117px -15px; + background-position: -1117px -652px; width: 60px; height: 60px; } .hair_bangs_3_candycorn { background-image: url(spritesmith-main-1.png); - background-position: -1092px -91px; + background-position: -1092px -728px; width: 90px; height: 90px; } .customize-option.hair_bangs_3_candycorn { background-image: url(spritesmith-main-1.png); - background-position: -1117px -106px; + background-position: -1117px -743px; width: 60px; height: 60px; } .hair_bangs_3_festive { background-image: url(spritesmith-main-1.png); - background-position: -1092px -182px; + background-position: -1092px -819px; width: 90px; height: 90px; } .customize-option.hair_bangs_3_festive { background-image: url(spritesmith-main-1.png); - background-position: -1117px -197px; + background-position: -1117px -834px; width: 60px; height: 60px; } .hair_bangs_3_frost { background-image: url(spritesmith-main-1.png); - background-position: -1092px -273px; + background-position: -1092px -910px; width: 90px; height: 90px; } .customize-option.hair_bangs_3_frost { background-image: url(spritesmith-main-1.png); - background-position: -1117px -288px; + background-position: -1117px -925px; width: 60px; height: 60px; } .hair_bangs_3_ghostwhite { background-image: url(spritesmith-main-1.png); - background-position: -1092px -364px; + background-position: -1092px -1001px; width: 90px; height: 90px; } .customize-option.hair_bangs_3_ghostwhite { background-image: url(spritesmith-main-1.png); - background-position: -1117px -379px; + background-position: -1117px -1016px; width: 60px; height: 60px; } .hair_bangs_3_green { background-image: url(spritesmith-main-1.png); - background-position: -1092px -455px; + background-position: 0px -1092px; width: 90px; height: 90px; } .customize-option.hair_bangs_3_green { background-image: url(spritesmith-main-1.png); - background-position: -1117px -470px; + background-position: -25px -1107px; width: 60px; height: 60px; } .hair_bangs_3_halloween { background-image: url(spritesmith-main-1.png); - background-position: -1092px -546px; + background-position: -91px -1092px; width: 90px; height: 90px; } .customize-option.hair_bangs_3_halloween { background-image: url(spritesmith-main-1.png); - background-position: -1117px -561px; + background-position: -116px -1107px; width: 60px; height: 60px; } .hair_bangs_3_holly { background-image: url(spritesmith-main-1.png); - background-position: -1092px -637px; + background-position: -182px -1092px; width: 90px; height: 90px; } .customize-option.hair_bangs_3_holly { background-image: url(spritesmith-main-1.png); - background-position: -1117px -652px; + background-position: -207px -1107px; width: 60px; height: 60px; } .hair_bangs_3_hollygreen { background-image: url(spritesmith-main-1.png); - background-position: -1092px -728px; + background-position: -273px -1092px; width: 90px; height: 90px; } .customize-option.hair_bangs_3_hollygreen { background-image: url(spritesmith-main-1.png); - background-position: -1117px -743px; + background-position: -298px -1107px; width: 60px; height: 60px; } .hair_bangs_3_midnight { background-image: url(spritesmith-main-1.png); - background-position: -1092px -819px; + background-position: -364px -1092px; width: 90px; height: 90px; } .customize-option.hair_bangs_3_midnight { background-image: url(spritesmith-main-1.png); - background-position: -1117px -834px; + background-position: -389px -1107px; width: 60px; height: 60px; } .hair_bangs_3_pblue { background-image: url(spritesmith-main-1.png); - background-position: -1092px -910px; + background-position: -455px -1092px; width: 90px; height: 90px; } .customize-option.hair_bangs_3_pblue { background-image: url(spritesmith-main-1.png); - background-position: -1117px -925px; + background-position: -480px -1107px; width: 60px; height: 60px; } .hair_bangs_3_pblue2 { background-image: url(spritesmith-main-1.png); - background-position: -1092px -1001px; + background-position: -546px -1092px; width: 90px; height: 90px; } .customize-option.hair_bangs_3_pblue2 { background-image: url(spritesmith-main-1.png); - background-position: -1117px -1016px; + background-position: -571px -1107px; width: 60px; height: 60px; } .hair_bangs_3_peppermint { background-image: url(spritesmith-main-1.png); - background-position: 0px -1092px; + background-position: -637px -1092px; width: 90px; height: 90px; } .customize-option.hair_bangs_3_peppermint { background-image: url(spritesmith-main-1.png); - background-position: -25px -1107px; + background-position: -662px -1107px; width: 60px; height: 60px; } .hair_bangs_3_pgreen { background-image: url(spritesmith-main-1.png); - background-position: -91px -1092px; + background-position: -728px -1092px; width: 90px; height: 90px; } .customize-option.hair_bangs_3_pgreen { background-image: url(spritesmith-main-1.png); - background-position: -116px -1107px; + background-position: -753px -1107px; width: 60px; height: 60px; } .hair_bangs_3_pgreen2 { background-image: url(spritesmith-main-1.png); - background-position: -182px -1092px; + background-position: -819px -1092px; width: 90px; height: 90px; } .customize-option.hair_bangs_3_pgreen2 { background-image: url(spritesmith-main-1.png); - background-position: -207px -1107px; + background-position: -844px -1107px; width: 60px; height: 60px; } .hair_bangs_3_porange { background-image: url(spritesmith-main-1.png); - background-position: -273px -1092px; + background-position: 0px 0px; width: 90px; height: 90px; } .customize-option.hair_bangs_3_porange { background-image: url(spritesmith-main-1.png); - background-position: -298px -1107px; + background-position: -25px -15px; width: 60px; height: 60px; } .hair_bangs_3_porange2 { background-image: url(spritesmith-main-1.png); - background-position: -364px -1092px; + background-position: -1001px -1092px; width: 90px; height: 90px; } .customize-option.hair_bangs_3_porange2 { background-image: url(spritesmith-main-1.png); - background-position: -389px -1107px; + background-position: -1026px -1107px; width: 60px; height: 60px; } .hair_bangs_3_ppink { background-image: url(spritesmith-main-1.png); - background-position: -455px -1092px; + background-position: -1092px -1092px; width: 90px; height: 90px; } .customize-option.hair_bangs_3_ppink { background-image: url(spritesmith-main-1.png); - background-position: -480px -1107px; + background-position: -1117px -1107px; width: 60px; height: 60px; } .hair_bangs_3_ppink2 { background-image: url(spritesmith-main-1.png); - background-position: -546px -1092px; + background-position: -1183px 0px; width: 90px; height: 90px; } .customize-option.hair_bangs_3_ppink2 { background-image: url(spritesmith-main-1.png); - background-position: -571px -1107px; + background-position: -1208px -15px; width: 60px; height: 60px; } .hair_bangs_3_ppurple { background-image: url(spritesmith-main-1.png); - background-position: -637px -1092px; + background-position: -1183px -91px; width: 90px; height: 90px; } .customize-option.hair_bangs_3_ppurple { background-image: url(spritesmith-main-1.png); - background-position: -662px -1107px; + background-position: -1208px -106px; width: 60px; height: 60px; } .hair_bangs_3_ppurple2 { background-image: url(spritesmith-main-1.png); - background-position: -728px -1092px; + background-position: -1183px -182px; width: 90px; height: 90px; } .customize-option.hair_bangs_3_ppurple2 { background-image: url(spritesmith-main-1.png); - background-position: -753px -1107px; + background-position: -1208px -197px; width: 60px; height: 60px; } .hair_bangs_3_pumpkin { background-image: url(spritesmith-main-1.png); - background-position: -819px -1092px; + background-position: -1183px -273px; width: 90px; height: 90px; } .customize-option.hair_bangs_3_pumpkin { background-image: url(spritesmith-main-1.png); - background-position: -844px -1107px; + background-position: -1208px -288px; width: 60px; height: 60px; } .hair_bangs_3_purple { background-image: url(spritesmith-main-1.png); - background-position: 0px 0px; + background-position: -1183px -364px; width: 90px; height: 90px; } .customize-option.hair_bangs_3_purple { background-image: url(spritesmith-main-1.png); - background-position: -25px -15px; + background-position: -1208px -379px; width: 60px; height: 60px; } .hair_bangs_3_pyellow { background-image: url(spritesmith-main-1.png); - background-position: -1001px -1092px; + background-position: -1183px -455px; width: 90px; height: 90px; } .customize-option.hair_bangs_3_pyellow { background-image: url(spritesmith-main-1.png); - background-position: -1026px -1107px; + background-position: -1208px -470px; width: 60px; height: 60px; } .hair_bangs_3_pyellow2 { background-image: url(spritesmith-main-1.png); - background-position: -1092px -1092px; + background-position: -1183px -546px; width: 90px; height: 90px; } .customize-option.hair_bangs_3_pyellow2 { background-image: url(spritesmith-main-1.png); - background-position: -1117px -1107px; + background-position: -1208px -561px; width: 60px; height: 60px; } .hair_bangs_3_rainbow { background-image: url(spritesmith-main-1.png); - background-position: -1183px 0px; + background-position: -1183px -637px; width: 90px; height: 90px; } .customize-option.hair_bangs_3_rainbow { background-image: url(spritesmith-main-1.png); - background-position: -1208px -15px; + background-position: -1208px -652px; width: 60px; height: 60px; } .hair_bangs_3_red { background-image: url(spritesmith-main-1.png); - background-position: -1183px -91px; + background-position: -1183px -728px; width: 90px; height: 90px; } .customize-option.hair_bangs_3_red { background-image: url(spritesmith-main-1.png); - background-position: -1208px -106px; + background-position: -1208px -743px; width: 60px; height: 60px; } .hair_bangs_3_snowy { background-image: url(spritesmith-main-1.png); - background-position: -1183px -182px; + background-position: -1183px -819px; width: 90px; height: 90px; } .customize-option.hair_bangs_3_snowy { background-image: url(spritesmith-main-1.png); - background-position: -1208px -197px; + background-position: -1208px -834px; width: 60px; height: 60px; } .hair_bangs_3_white { background-image: url(spritesmith-main-1.png); - background-position: -1183px -364px; + background-position: -1183px -1001px; width: 90px; height: 90px; } .customize-option.hair_bangs_3_white { background-image: url(spritesmith-main-1.png); - background-position: -1208px -379px; + background-position: -1208px -1016px; width: 60px; height: 60px; } .hair_bangs_3_winternight { background-image: url(spritesmith-main-1.png); - background-position: -1183px -455px; + background-position: -1183px -1092px; width: 90px; height: 90px; } .customize-option.hair_bangs_3_winternight { background-image: url(spritesmith-main-1.png); - background-position: -1208px -470px; + background-position: -1208px -1107px; width: 60px; height: 60px; } .hair_bangs_3_winterstar { background-image: url(spritesmith-main-1.png); - background-position: -1183px -546px; + background-position: 0px -1183px; width: 90px; height: 90px; } .customize-option.hair_bangs_3_winterstar { background-image: url(spritesmith-main-1.png); - background-position: -1208px -561px; + background-position: -25px -1198px; width: 60px; height: 60px; } .hair_bangs_3_yellow { background-image: url(spritesmith-main-1.png); - background-position: -1183px -637px; + background-position: -91px -1183px; width: 90px; height: 90px; } .customize-option.hair_bangs_3_yellow { background-image: url(spritesmith-main-1.png); - background-position: -1208px -652px; + background-position: -116px -1198px; width: 60px; height: 60px; } .hair_bangs_3_zombie { background-image: url(spritesmith-main-1.png); - background-position: -1183px -728px; + background-position: -182px -1183px; width: 90px; height: 90px; } .customize-option.hair_bangs_3_zombie { background-image: url(spritesmith-main-1.png); - background-position: -1208px -743px; + background-position: -207px -1198px; width: 60px; height: 60px; } .hair_base_10_TRUred { background-image: url(spritesmith-main-1.png); - background-position: -910px -1365px; + background-position: -1456px -91px; width: 90px; height: 90px; } .customize-option.hair_base_10_TRUred { background-image: url(spritesmith-main-1.png); - background-position: -935px -1380px; + background-position: -1481px -106px; width: 60px; height: 60px; } .hair_base_10_aurora { background-image: url(spritesmith-main-1.png); - background-position: -637px -1274px; + background-position: -1274px -1274px; width: 90px; height: 90px; } .customize-option.hair_base_10_aurora { background-image: url(spritesmith-main-1.png); - background-position: -662px -1289px; + background-position: -1299px -1289px; width: 60px; height: 60px; } .hair_base_10_black { background-image: url(spritesmith-main-1.png); - background-position: -728px -1274px; + background-position: -1365px 0px; width: 90px; height: 90px; } .customize-option.hair_base_10_black { background-image: url(spritesmith-main-1.png); - background-position: -753px -1289px; + background-position: -1390px -15px; width: 60px; height: 60px; } .hair_base_10_blond { background-image: url(spritesmith-main-1.png); - background-position: -819px -1274px; + background-position: -1365px -91px; width: 90px; height: 90px; } .customize-option.hair_base_10_blond { background-image: url(spritesmith-main-1.png); - background-position: -844px -1289px; + background-position: -1390px -106px; width: 60px; height: 60px; } .hair_base_10_blue { background-image: url(spritesmith-main-1.png); - background-position: -910px -1274px; + background-position: -1365px -182px; width: 90px; height: 90px; } .customize-option.hair_base_10_blue { background-image: url(spritesmith-main-1.png); - background-position: -935px -1289px; + background-position: -1390px -197px; width: 60px; height: 60px; } .hair_base_10_brown { background-image: url(spritesmith-main-1.png); - background-position: -1001px -1274px; + background-position: -1365px -273px; width: 90px; height: 90px; } .customize-option.hair_base_10_brown { background-image: url(spritesmith-main-1.png); - background-position: -1026px -1289px; + background-position: -1390px -288px; width: 60px; height: 60px; } .hair_base_10_candycane { background-image: url(spritesmith-main-1.png); - background-position: -1092px -1274px; + background-position: -1365px -364px; width: 90px; height: 90px; } .customize-option.hair_base_10_candycane { background-image: url(spritesmith-main-1.png); - background-position: -1117px -1289px; + background-position: -1390px -379px; width: 60px; height: 60px; } .hair_base_10_candycorn { background-image: url(spritesmith-main-1.png); - background-position: -1183px -1274px; + background-position: -1365px -455px; width: 90px; height: 90px; } .customize-option.hair_base_10_candycorn { background-image: url(spritesmith-main-1.png); - background-position: -1208px -1289px; + background-position: -1390px -470px; width: 60px; height: 60px; } .hair_base_10_festive { background-image: url(spritesmith-main-1.png); - background-position: -1274px -1274px; + background-position: -1365px -546px; width: 90px; height: 90px; } .customize-option.hair_base_10_festive { background-image: url(spritesmith-main-1.png); - background-position: -1299px -1289px; + background-position: -1390px -561px; width: 60px; height: 60px; } .hair_base_10_frost { background-image: url(spritesmith-main-1.png); - background-position: -1365px 0px; + background-position: -1365px -637px; width: 90px; height: 90px; } .customize-option.hair_base_10_frost { background-image: url(spritesmith-main-1.png); - background-position: -1390px -15px; + background-position: -1390px -652px; width: 60px; height: 60px; } .hair_base_10_ghostwhite { background-image: url(spritesmith-main-1.png); - background-position: -1365px -91px; + background-position: -1365px -728px; width: 90px; height: 90px; } .customize-option.hair_base_10_ghostwhite { background-image: url(spritesmith-main-1.png); - background-position: -1390px -106px; + background-position: -1390px -743px; width: 60px; height: 60px; } .hair_base_10_green { background-image: url(spritesmith-main-1.png); - background-position: -1365px -182px; + background-position: -1365px -819px; width: 90px; height: 90px; } .customize-option.hair_base_10_green { background-image: url(spritesmith-main-1.png); - background-position: -1390px -197px; + background-position: -1390px -834px; width: 60px; height: 60px; } .hair_base_10_halloween { background-image: url(spritesmith-main-1.png); - background-position: -1365px -273px; + background-position: -1365px -910px; width: 90px; height: 90px; } .customize-option.hair_base_10_halloween { background-image: url(spritesmith-main-1.png); - background-position: -1390px -288px; + background-position: -1390px -925px; width: 60px; height: 60px; } .hair_base_10_holly { background-image: url(spritesmith-main-1.png); - background-position: -1365px -364px; + background-position: -1365px -1001px; width: 90px; height: 90px; } .customize-option.hair_base_10_holly { background-image: url(spritesmith-main-1.png); - background-position: -1390px -379px; + background-position: -1390px -1016px; width: 60px; height: 60px; } .hair_base_10_hollygreen { background-image: url(spritesmith-main-1.png); - background-position: -1365px -455px; + background-position: -1365px -1092px; width: 90px; height: 90px; } .customize-option.hair_base_10_hollygreen { background-image: url(spritesmith-main-1.png); - background-position: -1390px -470px; + background-position: -1390px -1107px; width: 60px; height: 60px; } .hair_base_10_midnight { background-image: url(spritesmith-main-1.png); - background-position: -1365px -546px; + background-position: -1365px -1183px; width: 90px; height: 90px; } .customize-option.hair_base_10_midnight { background-image: url(spritesmith-main-1.png); - background-position: -1390px -561px; + background-position: -1390px -1198px; width: 60px; height: 60px; } .hair_base_10_pblue { background-image: url(spritesmith-main-1.png); - background-position: -1365px -637px; + background-position: -1365px -1274px; width: 90px; height: 90px; } .customize-option.hair_base_10_pblue { background-image: url(spritesmith-main-1.png); - background-position: -1390px -652px; + background-position: -1390px -1289px; width: 60px; height: 60px; } .hair_base_10_pblue2 { background-image: url(spritesmith-main-1.png); - background-position: -1365px -728px; + background-position: 0px -1365px; width: 90px; height: 90px; } .customize-option.hair_base_10_pblue2 { background-image: url(spritesmith-main-1.png); - background-position: -1390px -743px; + background-position: -25px -1380px; width: 60px; height: 60px; } .hair_base_10_peppermint { background-image: url(spritesmith-main-1.png); - background-position: -1365px -819px; + background-position: -91px -1365px; width: 90px; height: 90px; } .customize-option.hair_base_10_peppermint { background-image: url(spritesmith-main-1.png); - background-position: -1390px -834px; + background-position: -116px -1380px; width: 60px; height: 60px; } .hair_base_10_pgreen { background-image: url(spritesmith-main-1.png); - background-position: -1365px -910px; + background-position: -182px -1365px; width: 90px; height: 90px; } .customize-option.hair_base_10_pgreen { background-image: url(spritesmith-main-1.png); - background-position: -1390px -925px; + background-position: -207px -1380px; width: 60px; height: 60px; } .hair_base_10_pgreen2 { background-image: url(spritesmith-main-1.png); - background-position: -1365px -1001px; + background-position: -273px -1365px; width: 90px; height: 90px; } .customize-option.hair_base_10_pgreen2 { background-image: url(spritesmith-main-1.png); - background-position: -1390px -1016px; + background-position: -298px -1380px; width: 60px; height: 60px; } .hair_base_10_porange { background-image: url(spritesmith-main-1.png); - background-position: -1365px -1092px; + background-position: -364px -1365px; width: 90px; height: 90px; } .customize-option.hair_base_10_porange { background-image: url(spritesmith-main-1.png); - background-position: -1390px -1107px; + background-position: -389px -1380px; width: 60px; height: 60px; } .hair_base_10_porange2 { background-image: url(spritesmith-main-1.png); - background-position: -1365px -1183px; + background-position: -455px -1365px; width: 90px; height: 90px; } .customize-option.hair_base_10_porange2 { background-image: url(spritesmith-main-1.png); - background-position: -1390px -1198px; + background-position: -480px -1380px; width: 60px; height: 60px; } .hair_base_10_ppink { background-image: url(spritesmith-main-1.png); - background-position: -1365px -1274px; + background-position: -546px -1365px; width: 90px; height: 90px; } .customize-option.hair_base_10_ppink { background-image: url(spritesmith-main-1.png); - background-position: -1390px -1289px; + background-position: -571px -1380px; width: 60px; height: 60px; } .hair_base_10_ppink2 { background-image: url(spritesmith-main-1.png); - background-position: 0px -1365px; + background-position: -637px -1365px; width: 90px; height: 90px; } .customize-option.hair_base_10_ppink2 { background-image: url(spritesmith-main-1.png); - background-position: -25px -1380px; + background-position: -662px -1380px; width: 60px; height: 60px; } .hair_base_10_ppurple { background-image: url(spritesmith-main-1.png); - background-position: -91px -1365px; + background-position: -728px -1365px; width: 90px; height: 90px; } .customize-option.hair_base_10_ppurple { background-image: url(spritesmith-main-1.png); - background-position: -116px -1380px; + background-position: -753px -1380px; width: 60px; height: 60px; } .hair_base_10_ppurple2 { background-image: url(spritesmith-main-1.png); - background-position: -182px -1365px; + background-position: -819px -1365px; width: 90px; height: 90px; } .customize-option.hair_base_10_ppurple2 { background-image: url(spritesmith-main-1.png); - background-position: -207px -1380px; + background-position: -844px -1380px; width: 60px; height: 60px; } .hair_base_10_pumpkin { background-image: url(spritesmith-main-1.png); - background-position: -273px -1365px; + background-position: -910px -1365px; width: 90px; height: 90px; } .customize-option.hair_base_10_pumpkin { background-image: url(spritesmith-main-1.png); - background-position: -298px -1380px; + background-position: -935px -1380px; width: 60px; height: 60px; } .hair_base_10_purple { background-image: url(spritesmith-main-1.png); - background-position: -364px -1365px; + background-position: -1001px -1365px; width: 90px; height: 90px; } .customize-option.hair_base_10_purple { background-image: url(spritesmith-main-1.png); - background-position: -389px -1380px; + background-position: -1026px -1380px; width: 60px; height: 60px; } .hair_base_10_pyellow { background-image: url(spritesmith-main-1.png); - background-position: -455px -1365px; + background-position: -1092px -1365px; width: 90px; height: 90px; } .customize-option.hair_base_10_pyellow { background-image: url(spritesmith-main-1.png); - background-position: -480px -1380px; + background-position: -1117px -1380px; width: 60px; height: 60px; } .hair_base_10_pyellow2 { background-image: url(spritesmith-main-1.png); - background-position: -546px -1365px; + background-position: -1183px -1365px; width: 90px; height: 90px; } .customize-option.hair_base_10_pyellow2 { background-image: url(spritesmith-main-1.png); - background-position: -571px -1380px; + background-position: -1208px -1380px; width: 60px; height: 60px; } .hair_base_10_rainbow { background-image: url(spritesmith-main-1.png); - background-position: -637px -1365px; + background-position: -1274px -1365px; width: 90px; height: 90px; } .customize-option.hair_base_10_rainbow { background-image: url(spritesmith-main-1.png); - background-position: -662px -1380px; + background-position: -1299px -1380px; width: 60px; height: 60px; } .hair_base_10_red { background-image: url(spritesmith-main-1.png); - background-position: -728px -1365px; + background-position: -1365px -1365px; width: 90px; height: 90px; } .customize-option.hair_base_10_red { background-image: url(spritesmith-main-1.png); - background-position: -753px -1380px; + background-position: -1390px -1380px; width: 60px; height: 60px; } .hair_base_10_snowy { background-image: url(spritesmith-main-1.png); - background-position: -819px -1365px; + background-position: -1456px 0px; width: 90px; height: 90px; } .customize-option.hair_base_10_snowy { background-image: url(spritesmith-main-1.png); - background-position: -844px -1380px; + background-position: -1481px -15px; width: 60px; height: 60px; } .hair_base_10_white { background-image: url(spritesmith-main-1.png); - background-position: -1001px -1365px; + background-position: -1456px -182px; width: 90px; height: 90px; } .customize-option.hair_base_10_white { background-image: url(spritesmith-main-1.png); - background-position: -1026px -1380px; + background-position: -1481px -197px; width: 60px; height: 60px; } .hair_base_10_winternight { background-image: url(spritesmith-main-1.png); - background-position: -1092px -1365px; + background-position: -1456px -273px; width: 90px; height: 90px; } .customize-option.hair_base_10_winternight { background-image: url(spritesmith-main-1.png); - background-position: -1117px -1380px; + background-position: -1481px -288px; width: 60px; height: 60px; } .hair_base_10_winterstar { background-image: url(spritesmith-main-1.png); - background-position: -1183px -1365px; + background-position: -1456px -364px; width: 90px; height: 90px; } .customize-option.hair_base_10_winterstar { background-image: url(spritesmith-main-1.png); - background-position: -1208px -1380px; + background-position: -1481px -379px; width: 60px; height: 60px; } .hair_base_10_yellow { background-image: url(spritesmith-main-1.png); - background-position: -1274px -1365px; + background-position: -1456px -455px; width: 90px; height: 90px; } .customize-option.hair_base_10_yellow { background-image: url(spritesmith-main-1.png); - background-position: -1299px -1380px; + background-position: -1481px -470px; width: 60px; height: 60px; } .hair_base_10_zombie { background-image: url(spritesmith-main-1.png); - background-position: -1365px -1365px; + background-position: -1456px -546px; width: 90px; height: 90px; } .customize-option.hair_base_10_zombie { background-image: url(spritesmith-main-1.png); - background-position: -1390px -1380px; + background-position: -1481px -561px; width: 60px; height: 60px; } .hair_base_11_TRUred { background-image: url(spritesmith-main-1.png); - background-position: -1547px 0px; + background-position: -1547px -637px; width: 90px; height: 90px; } .customize-option.hair_base_11_TRUred { background-image: url(spritesmith-main-1.png); - background-position: -1572px -15px; + background-position: -1572px -652px; width: 60px; height: 60px; } .hair_base_11_aurora { background-image: url(spritesmith-main-1.png); - background-position: -1456px 0px; + background-position: -1456px -637px; width: 90px; height: 90px; } .customize-option.hair_base_11_aurora { background-image: url(spritesmith-main-1.png); - background-position: -1481px -15px; + background-position: -1481px -652px; width: 60px; height: 60px; } .hair_base_11_black { background-image: url(spritesmith-main-1.png); - background-position: -1456px -91px; + background-position: -1456px -728px; width: 90px; height: 90px; } .customize-option.hair_base_11_black { background-image: url(spritesmith-main-1.png); - background-position: -1481px -106px; + background-position: -1481px -743px; width: 60px; height: 60px; } .hair_base_11_blond { background-image: url(spritesmith-main-1.png); - background-position: -1456px -182px; + background-position: -1456px -819px; width: 90px; height: 90px; } .customize-option.hair_base_11_blond { background-image: url(spritesmith-main-1.png); - background-position: -1481px -197px; + background-position: -1481px -834px; width: 60px; height: 60px; } .hair_base_11_blue { background-image: url(spritesmith-main-1.png); - background-position: -1456px -273px; + background-position: -1456px -910px; width: 90px; height: 90px; } .customize-option.hair_base_11_blue { background-image: url(spritesmith-main-1.png); - background-position: -1481px -288px; + background-position: -1481px -925px; width: 60px; height: 60px; } .hair_base_11_brown { background-image: url(spritesmith-main-1.png); - background-position: -1456px -364px; + background-position: -1456px -1001px; width: 90px; height: 90px; } .customize-option.hair_base_11_brown { background-image: url(spritesmith-main-1.png); - background-position: -1481px -379px; + background-position: -1481px -1016px; width: 60px; height: 60px; } .hair_base_11_candycane { background-image: url(spritesmith-main-1.png); - background-position: -1456px -455px; + background-position: -1456px -1092px; width: 90px; height: 90px; } .customize-option.hair_base_11_candycane { background-image: url(spritesmith-main-1.png); - background-position: -1481px -470px; + background-position: -1481px -1107px; width: 60px; height: 60px; } .hair_base_11_candycorn { background-image: url(spritesmith-main-1.png); - background-position: -1456px -546px; + background-position: -1456px -1183px; width: 90px; height: 90px; } .customize-option.hair_base_11_candycorn { background-image: url(spritesmith-main-1.png); - background-position: -1481px -561px; + background-position: -1481px -1198px; width: 60px; height: 60px; } .hair_base_11_festive { background-image: url(spritesmith-main-1.png); - background-position: -1456px -637px; + background-position: -1456px -1274px; width: 90px; height: 90px; } .customize-option.hair_base_11_festive { background-image: url(spritesmith-main-1.png); - background-position: -1481px -652px; + background-position: -1481px -1289px; width: 60px; height: 60px; } .hair_base_11_frost { background-image: url(spritesmith-main-1.png); - background-position: -1456px -728px; + background-position: -1456px -1365px; width: 90px; height: 90px; } .customize-option.hair_base_11_frost { background-image: url(spritesmith-main-1.png); - background-position: -1481px -743px; + background-position: -1481px -1380px; width: 60px; height: 60px; } .hair_base_11_ghostwhite { background-image: url(spritesmith-main-1.png); - background-position: -1456px -819px; + background-position: 0px -1456px; width: 90px; height: 90px; } .customize-option.hair_base_11_ghostwhite { background-image: url(spritesmith-main-1.png); - background-position: -1481px -834px; + background-position: -25px -1471px; width: 60px; height: 60px; } .hair_base_11_green { background-image: url(spritesmith-main-1.png); - background-position: -1456px -910px; + background-position: -91px -1456px; width: 90px; height: 90px; } .customize-option.hair_base_11_green { background-image: url(spritesmith-main-1.png); - background-position: -1481px -925px; + background-position: -116px -1471px; width: 60px; height: 60px; } .hair_base_11_halloween { background-image: url(spritesmith-main-1.png); - background-position: -1456px -1001px; + background-position: -182px -1456px; width: 90px; height: 90px; } .customize-option.hair_base_11_halloween { background-image: url(spritesmith-main-1.png); - background-position: -1481px -1016px; + background-position: -207px -1471px; width: 60px; height: 60px; } .hair_base_11_holly { background-image: url(spritesmith-main-1.png); - background-position: -1456px -1092px; + background-position: -273px -1456px; width: 90px; height: 90px; } .customize-option.hair_base_11_holly { background-image: url(spritesmith-main-1.png); - background-position: -1481px -1107px; + background-position: -298px -1471px; width: 60px; height: 60px; } .hair_base_11_hollygreen { background-image: url(spritesmith-main-1.png); - background-position: -1456px -1183px; + background-position: -364px -1456px; width: 90px; height: 90px; } .customize-option.hair_base_11_hollygreen { background-image: url(spritesmith-main-1.png); - background-position: -1481px -1198px; + background-position: -389px -1471px; width: 60px; height: 60px; } .hair_base_11_midnight { background-image: url(spritesmith-main-1.png); - background-position: -1456px -1274px; + background-position: -455px -1456px; width: 90px; height: 90px; } .customize-option.hair_base_11_midnight { background-image: url(spritesmith-main-1.png); - background-position: -1481px -1289px; + background-position: -480px -1471px; width: 60px; height: 60px; } .hair_base_11_pblue { background-image: url(spritesmith-main-1.png); - background-position: -1456px -1365px; + background-position: -546px -1456px; width: 90px; height: 90px; } .customize-option.hair_base_11_pblue { background-image: url(spritesmith-main-1.png); - background-position: -1481px -1380px; + background-position: -571px -1471px; width: 60px; height: 60px; } .hair_base_11_pblue2 { background-image: url(spritesmith-main-1.png); - background-position: 0px -1456px; + background-position: -637px -1456px; width: 90px; height: 90px; } .customize-option.hair_base_11_pblue2 { background-image: url(spritesmith-main-1.png); - background-position: -25px -1471px; + background-position: -662px -1471px; width: 60px; height: 60px; } .hair_base_11_peppermint { background-image: url(spritesmith-main-1.png); - background-position: -91px -1456px; + background-position: -728px -1456px; width: 90px; height: 90px; } .customize-option.hair_base_11_peppermint { background-image: url(spritesmith-main-1.png); - background-position: -116px -1471px; + background-position: -753px -1471px; width: 60px; height: 60px; } .hair_base_11_pgreen { background-image: url(spritesmith-main-1.png); - background-position: -182px -1456px; + background-position: -819px -1456px; width: 90px; height: 90px; } .customize-option.hair_base_11_pgreen { background-image: url(spritesmith-main-1.png); - background-position: -207px -1471px; + background-position: -844px -1471px; width: 60px; height: 60px; } .hair_base_11_pgreen2 { background-image: url(spritesmith-main-1.png); - background-position: -273px -1456px; + background-position: -910px -1456px; width: 90px; height: 90px; } .customize-option.hair_base_11_pgreen2 { background-image: url(spritesmith-main-1.png); - background-position: -298px -1471px; + background-position: -935px -1471px; width: 60px; height: 60px; } .hair_base_11_porange { background-image: url(spritesmith-main-1.png); - background-position: -364px -1456px; + background-position: -1001px -1456px; width: 90px; height: 90px; } .customize-option.hair_base_11_porange { background-image: url(spritesmith-main-1.png); - background-position: -389px -1471px; + background-position: -1026px -1471px; width: 60px; height: 60px; } .hair_base_11_porange2 { background-image: url(spritesmith-main-1.png); - background-position: -455px -1456px; + background-position: -1092px -1456px; width: 90px; height: 90px; } .customize-option.hair_base_11_porange2 { background-image: url(spritesmith-main-1.png); - background-position: -480px -1471px; + background-position: -1117px -1471px; width: 60px; height: 60px; } .hair_base_11_ppink { background-image: url(spritesmith-main-1.png); - background-position: -546px -1456px; + background-position: -1183px -1456px; width: 90px; height: 90px; } .customize-option.hair_base_11_ppink { background-image: url(spritesmith-main-1.png); - background-position: -571px -1471px; + background-position: -1208px -1471px; width: 60px; height: 60px; } .hair_base_11_ppink2 { background-image: url(spritesmith-main-1.png); - background-position: -637px -1456px; + background-position: -1274px -1456px; width: 90px; height: 90px; } .customize-option.hair_base_11_ppink2 { background-image: url(spritesmith-main-1.png); - background-position: -662px -1471px; + background-position: -1299px -1471px; width: 60px; height: 60px; } .hair_base_11_ppurple { background-image: url(spritesmith-main-1.png); - background-position: -728px -1456px; + background-position: -1365px -1456px; width: 90px; height: 90px; } .customize-option.hair_base_11_ppurple { background-image: url(spritesmith-main-1.png); - background-position: -753px -1471px; + background-position: -1390px -1471px; width: 60px; height: 60px; } .hair_base_11_ppurple2 { background-image: url(spritesmith-main-1.png); - background-position: -819px -1456px; + background-position: -1456px -1456px; width: 90px; height: 90px; } .customize-option.hair_base_11_ppurple2 { background-image: url(spritesmith-main-1.png); - background-position: -844px -1471px; + background-position: -1481px -1471px; width: 60px; height: 60px; } .hair_base_11_pumpkin { background-image: url(spritesmith-main-1.png); - background-position: -910px -1456px; + background-position: -1547px 0px; width: 90px; height: 90px; } .customize-option.hair_base_11_pumpkin { background-image: url(spritesmith-main-1.png); - background-position: -935px -1471px; + background-position: -1572px -15px; width: 60px; height: 60px; } .hair_base_11_purple { background-image: url(spritesmith-main-1.png); - background-position: -1001px -1456px; + background-position: -1547px -91px; width: 90px; height: 90px; } .customize-option.hair_base_11_purple { background-image: url(spritesmith-main-1.png); - background-position: -1026px -1471px; + background-position: -1572px -106px; width: 60px; height: 60px; } .hair_base_11_pyellow { background-image: url(spritesmith-main-1.png); - background-position: -1092px -1456px; + background-position: -1547px -182px; width: 90px; height: 90px; } .customize-option.hair_base_11_pyellow { background-image: url(spritesmith-main-1.png); - background-position: -1117px -1471px; + background-position: -1572px -197px; width: 60px; height: 60px; } .hair_base_11_pyellow2 { background-image: url(spritesmith-main-1.png); - background-position: -1183px -1456px; + background-position: -1547px -273px; width: 90px; height: 90px; } .customize-option.hair_base_11_pyellow2 { background-image: url(spritesmith-main-1.png); - background-position: -1208px -1471px; + background-position: -1572px -288px; width: 60px; height: 60px; } .hair_base_11_rainbow { background-image: url(spritesmith-main-1.png); - background-position: -1274px -1456px; + background-position: -1547px -364px; width: 90px; height: 90px; } .customize-option.hair_base_11_rainbow { background-image: url(spritesmith-main-1.png); - background-position: -1299px -1471px; + background-position: -1572px -379px; width: 60px; height: 60px; } .hair_base_11_red { background-image: url(spritesmith-main-1.png); - background-position: -1365px -1456px; + background-position: -1547px -455px; width: 90px; height: 90px; } .customize-option.hair_base_11_red { background-image: url(spritesmith-main-1.png); - background-position: -1390px -1471px; + background-position: -1572px -470px; width: 60px; height: 60px; } .hair_base_11_snowy { background-image: url(spritesmith-main-1.png); - background-position: -1456px -1456px; + background-position: -1547px -546px; width: 90px; height: 90px; } .customize-option.hair_base_11_snowy { background-image: url(spritesmith-main-1.png); - background-position: -1481px -1471px; + background-position: -1572px -561px; width: 60px; height: 60px; } .hair_base_11_white { background-image: url(spritesmith-main-1.png); - background-position: -1547px -91px; + background-position: -1547px -728px; width: 90px; height: 90px; } .customize-option.hair_base_11_white { background-image: url(spritesmith-main-1.png); - background-position: -1572px -106px; + background-position: -1572px -743px; width: 60px; height: 60px; } .hair_base_11_winternight { background-image: url(spritesmith-main-1.png); - background-position: -1547px -182px; + background-position: -1547px -819px; width: 90px; height: 90px; } .customize-option.hair_base_11_winternight { background-image: url(spritesmith-main-1.png); - background-position: -1572px -197px; + background-position: -1572px -834px; width: 60px; height: 60px; } .hair_base_11_winterstar { background-image: url(spritesmith-main-1.png); - background-position: -1547px -273px; + background-position: -1547px -910px; width: 90px; height: 90px; } .customize-option.hair_base_11_winterstar { background-image: url(spritesmith-main-1.png); - background-position: -1572px -288px; + background-position: -1572px -925px; width: 60px; height: 60px; } .hair_base_11_yellow { background-image: url(spritesmith-main-1.png); - background-position: -1547px -364px; + background-position: -1547px -1001px; width: 90px; height: 90px; } .customize-option.hair_base_11_yellow { background-image: url(spritesmith-main-1.png); - background-position: -1572px -379px; + background-position: -1572px -1016px; width: 60px; height: 60px; } .hair_base_11_zombie { background-image: url(spritesmith-main-1.png); - background-position: -1547px -455px; + background-position: -1547px -1092px; width: 90px; height: 90px; } .customize-option.hair_base_11_zombie { background-image: url(spritesmith-main-1.png); - background-position: -1572px -470px; - width: 60px; - height: 60px; -} -.hair_base_12_TRUred { - background-image: url(spritesmith-main-1.png); - background-position: -273px -546px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_12_TRUred { - background-image: url(spritesmith-main-1.png); - background-position: -298px -561px; + background-position: -1572px -1107px; width: 60px; height: 60px; } .hair_base_12_aurora { background-image: url(spritesmith-main-1.png); - background-position: -1547px -546px; + background-position: -1547px -1183px; width: 90px; height: 90px; } .customize-option.hair_base_12_aurora { background-image: url(spritesmith-main-1.png); - background-position: -1572px -561px; + background-position: -1572px -1198px; width: 60px; height: 60px; } .hair_base_12_black { background-image: url(spritesmith-main-1.png); - background-position: -1547px -637px; + background-position: -1547px -1274px; width: 90px; height: 90px; } .customize-option.hair_base_12_black { background-image: url(spritesmith-main-1.png); - background-position: -1572px -652px; + background-position: -1572px -1289px; width: 60px; height: 60px; } .hair_base_12_blond { background-image: url(spritesmith-main-1.png); - background-position: -1547px -728px; + background-position: -1547px -1365px; width: 90px; height: 90px; } .customize-option.hair_base_12_blond { background-image: url(spritesmith-main-1.png); - background-position: -1572px -743px; + background-position: -1572px -1380px; width: 60px; height: 60px; } .hair_base_12_blue { background-image: url(spritesmith-main-1.png); - background-position: -1547px -819px; + background-position: -1547px -1456px; width: 90px; height: 90px; } .customize-option.hair_base_12_blue { background-image: url(spritesmith-main-1.png); - background-position: -1572px -834px; + background-position: -1572px -1471px; width: 60px; height: 60px; } .hair_base_12_brown { background-image: url(spritesmith-main-1.png); - background-position: -1547px -910px; + background-position: 0px -1547px; width: 90px; height: 90px; } .customize-option.hair_base_12_brown { background-image: url(spritesmith-main-1.png); - background-position: -1572px -925px; + background-position: -25px -1562px; width: 60px; height: 60px; } .hair_base_12_candycane { background-image: url(spritesmith-main-1.png); - background-position: -1547px -1001px; + background-position: -91px -1547px; width: 90px; height: 90px; } .customize-option.hair_base_12_candycane { background-image: url(spritesmith-main-1.png); - background-position: -1572px -1016px; + background-position: -116px -1562px; width: 60px; height: 60px; } .hair_base_12_candycorn { background-image: url(spritesmith-main-1.png); - background-position: -1547px -1092px; + background-position: -182px -1547px; width: 90px; height: 90px; } .customize-option.hair_base_12_candycorn { background-image: url(spritesmith-main-1.png); - background-position: -1572px -1107px; + background-position: -207px -1562px; width: 60px; height: 60px; } .hair_base_12_festive { background-image: url(spritesmith-main-1.png); - background-position: -1547px -1183px; + background-position: -273px -1547px; width: 90px; height: 90px; } .customize-option.hair_base_12_festive { background-image: url(spritesmith-main-1.png); - background-position: -1572px -1198px; + background-position: -298px -1562px; width: 60px; height: 60px; } .hair_base_12_frost { background-image: url(spritesmith-main-1.png); - background-position: -1547px -1274px; + background-position: -364px -1547px; width: 90px; height: 90px; } .customize-option.hair_base_12_frost { background-image: url(spritesmith-main-1.png); - background-position: -1572px -1289px; + background-position: -389px -1562px; width: 60px; height: 60px; } .hair_base_12_ghostwhite { background-image: url(spritesmith-main-1.png); - background-position: -1547px -1365px; + background-position: -455px -1547px; width: 90px; height: 90px; } .customize-option.hair_base_12_ghostwhite { background-image: url(spritesmith-main-1.png); - background-position: -1572px -1380px; + background-position: -480px -1562px; width: 60px; height: 60px; } .hair_base_12_green { background-image: url(spritesmith-main-1.png); - background-position: -1547px -1456px; + background-position: -546px -1547px; width: 90px; height: 90px; } .customize-option.hair_base_12_green { background-image: url(spritesmith-main-1.png); - background-position: -1572px -1471px; + background-position: -571px -1562px; width: 60px; height: 60px; } .hair_base_12_halloween { background-image: url(spritesmith-main-1.png); - background-position: 0px -1547px; + background-position: -637px -1547px; width: 90px; height: 90px; } .customize-option.hair_base_12_halloween { background-image: url(spritesmith-main-1.png); - background-position: -25px -1562px; + background-position: -662px -1562px; width: 60px; height: 60px; } .hair_base_12_holly { background-image: url(spritesmith-main-1.png); - background-position: -91px -1547px; + background-position: -728px -1547px; width: 90px; height: 90px; } .customize-option.hair_base_12_holly { background-image: url(spritesmith-main-1.png); - background-position: -116px -1562px; + background-position: -753px -1562px; width: 60px; height: 60px; } .hair_base_12_hollygreen { background-image: url(spritesmith-main-1.png); - background-position: -182px -1547px; + background-position: -819px -1547px; width: 90px; height: 90px; } .customize-option.hair_base_12_hollygreen { background-image: url(spritesmith-main-1.png); - background-position: -207px -1562px; + background-position: -844px -1562px; width: 60px; height: 60px; } .hair_base_12_midnight { background-image: url(spritesmith-main-1.png); - background-position: -273px -1547px; + background-position: -910px -1547px; width: 90px; height: 90px; } .customize-option.hair_base_12_midnight { background-image: url(spritesmith-main-1.png); - background-position: -298px -1562px; + background-position: -935px -1562px; width: 60px; height: 60px; } .hair_base_12_pblue { background-image: url(spritesmith-main-1.png); - background-position: -364px -1547px; + background-position: -1001px -1547px; width: 90px; height: 90px; } .customize-option.hair_base_12_pblue { background-image: url(spritesmith-main-1.png); - background-position: -389px -1562px; + background-position: -1026px -1562px; width: 60px; height: 60px; } .hair_base_12_pblue2 { background-image: url(spritesmith-main-1.png); - background-position: -455px -1547px; + background-position: -1092px -1547px; width: 90px; height: 90px; } .customize-option.hair_base_12_pblue2 { background-image: url(spritesmith-main-1.png); - background-position: -480px -1562px; + background-position: -1117px -1562px; width: 60px; height: 60px; } .hair_base_12_peppermint { background-image: url(spritesmith-main-1.png); - background-position: -546px -1547px; + background-position: -1183px -1547px; width: 90px; height: 90px; } .customize-option.hair_base_12_peppermint { background-image: url(spritesmith-main-1.png); - background-position: -571px -1562px; + background-position: -1208px -1562px; width: 60px; height: 60px; } .hair_base_12_pgreen { background-image: url(spritesmith-main-1.png); - background-position: -637px -1547px; + background-position: -1274px -1547px; width: 90px; height: 90px; } .customize-option.hair_base_12_pgreen { background-image: url(spritesmith-main-1.png); - background-position: -662px -1562px; + background-position: -1299px -1562px; width: 60px; height: 60px; } .hair_base_12_pgreen2 { background-image: url(spritesmith-main-1.png); - background-position: -728px -1547px; + background-position: -1365px -1547px; width: 90px; height: 90px; } .customize-option.hair_base_12_pgreen2 { background-image: url(spritesmith-main-1.png); - background-position: -753px -1562px; + background-position: -1390px -1562px; width: 60px; height: 60px; } .hair_base_12_porange { background-image: url(spritesmith-main-1.png); - background-position: -819px -1547px; + background-position: -1456px -1547px; width: 90px; height: 90px; } .customize-option.hair_base_12_porange { background-image: url(spritesmith-main-1.png); - background-position: -844px -1562px; + background-position: -1481px -1562px; width: 60px; height: 60px; } .hair_base_12_porange2 { background-image: url(spritesmith-main-1.png); - background-position: -910px -1547px; + background-position: -1547px -1547px; width: 90px; height: 90px; } .customize-option.hair_base_12_porange2 { background-image: url(spritesmith-main-1.png); - background-position: -935px -1562px; + background-position: -1572px -1562px; width: 60px; height: 60px; } .hair_base_12_ppink { background-image: url(spritesmith-main-1.png); - background-position: -1001px -1547px; + background-position: -1638px 0px; width: 90px; height: 90px; } .customize-option.hair_base_12_ppink { background-image: url(spritesmith-main-1.png); - background-position: -1026px -1562px; + background-position: -1663px -15px; width: 60px; height: 60px; } .hair_base_12_ppink2 { background-image: url(spritesmith-main-1.png); - background-position: -1092px -1547px; + background-position: -637px -546px; width: 90px; height: 90px; } .customize-option.hair_base_12_ppink2 { background-image: url(spritesmith-main-1.png); - background-position: -1117px -1562px; + background-position: -662px -561px; width: 60px; height: 60px; } .hair_base_12_ppurple { background-image: url(spritesmith-main-1.png); - background-position: -1183px -1547px; + background-position: -637px -455px; width: 90px; height: 90px; } .customize-option.hair_base_12_ppurple { background-image: url(spritesmith-main-1.png); - background-position: -1208px -1562px; + background-position: -662px -470px; width: 60px; height: 60px; } .hair_base_12_ppurple2 { background-image: url(spritesmith-main-1.png); - background-position: -1274px -1547px; + background-position: -637px -364px; width: 90px; height: 90px; } .customize-option.hair_base_12_ppurple2 { background-image: url(spritesmith-main-1.png); - background-position: -1299px -1562px; + background-position: -662px -379px; width: 60px; height: 60px; } .hair_base_12_pumpkin { background-image: url(spritesmith-main-1.png); - background-position: -1365px -1547px; + background-position: -637px -273px; width: 90px; height: 90px; } .customize-option.hair_base_12_pumpkin { background-image: url(spritesmith-main-1.png); - background-position: -1390px -1562px; + background-position: -662px -288px; width: 60px; height: 60px; } .hair_base_12_purple { background-image: url(spritesmith-main-1.png); - background-position: -1456px -1547px; + background-position: -637px -182px; width: 90px; height: 90px; } .customize-option.hair_base_12_purple { background-image: url(spritesmith-main-1.png); - background-position: -1481px -1562px; + background-position: -662px -197px; width: 60px; height: 60px; } .hair_base_12_pyellow { background-image: url(spritesmith-main-1.png); - background-position: -1547px -1547px; + background-position: -637px -91px; width: 90px; height: 90px; } .customize-option.hair_base_12_pyellow { background-image: url(spritesmith-main-1.png); - background-position: -1572px -1562px; + background-position: -662px -106px; width: 60px; height: 60px; } .hair_base_12_pyellow2 { - background-image: url(spritesmith-main-1.png); - background-position: -1638px 0px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_12_pyellow2 { - background-image: url(spritesmith-main-1.png); - background-position: -1663px -15px; - width: 60px; - height: 60px; -} -.hair_base_12_rainbow { - background-image: url(spritesmith-main-1.png); - background-position: -546px -546px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_12_rainbow { - background-image: url(spritesmith-main-1.png); - background-position: -571px -561px; - width: 60px; - height: 60px; -} -.hair_base_12_red { - background-image: url(spritesmith-main-1.png); - background-position: -455px -546px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_12_red { - background-image: url(spritesmith-main-1.png); - background-position: -480px -561px; - width: 60px; - height: 60px; -} -.hair_base_12_snowy { - background-image: url(spritesmith-main-1.png); - background-position: -364px -546px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_12_snowy { - background-image: url(spritesmith-main-1.png); - background-position: -389px -561px; - width: 60px; - height: 60px; -} -.hair_base_12_white { - background-image: url(spritesmith-main-1.png); - background-position: -182px -546px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_12_white { - background-image: url(spritesmith-main-1.png); - background-position: -207px -561px; - width: 60px; - height: 60px; -} -.hair_base_12_winternight { - background-image: url(spritesmith-main-1.png); - background-position: -91px -546px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_12_winternight { - background-image: url(spritesmith-main-1.png); - background-position: -116px -561px; - width: 60px; - height: 60px; -} -.hair_base_12_winterstar { background-image: url(spritesmith-main-1.png); background-position: -1638px -91px; width: 90px; height: 90px; } -.customize-option.hair_base_12_winterstar { +.customize-option.hair_base_12_pyellow2 { background-image: url(spritesmith-main-1.png); background-position: -1663px -106px; width: 60px; @@ -3444,469 +3444,469 @@ } .hair_base_1_TRUred { background-image: url(spritesmith-main-1.png); - background-position: -91px -1274px; + background-position: -728px -1274px; width: 90px; height: 90px; } .customize-option.hair_base_1_TRUred { background-image: url(spritesmith-main-1.png); - background-position: -116px -1289px; + background-position: -753px -1289px; width: 60px; height: 60px; } .hair_base_1_aurora { background-image: url(spritesmith-main-1.png); - background-position: -1183px -819px; + background-position: -273px -1183px; width: 90px; height: 90px; } .customize-option.hair_base_1_aurora { background-image: url(spritesmith-main-1.png); - background-position: -1208px -834px; + background-position: -298px -1198px; width: 60px; height: 60px; } .hair_base_1_black { background-image: url(spritesmith-main-1.png); - background-position: -1183px -910px; + background-position: -364px -1183px; width: 90px; height: 90px; } .customize-option.hair_base_1_black { background-image: url(spritesmith-main-1.png); - background-position: -1208px -925px; + background-position: -389px -1198px; width: 60px; height: 60px; } .hair_base_1_blond { background-image: url(spritesmith-main-1.png); - background-position: -1183px -1001px; + background-position: -455px -1183px; width: 90px; height: 90px; } .customize-option.hair_base_1_blond { background-image: url(spritesmith-main-1.png); - background-position: -1208px -1016px; + background-position: -480px -1198px; width: 60px; height: 60px; } .hair_base_1_blue { background-image: url(spritesmith-main-1.png); - background-position: -1183px -1092px; + background-position: -546px -1183px; width: 90px; height: 90px; } .customize-option.hair_base_1_blue { background-image: url(spritesmith-main-1.png); - background-position: -1208px -1107px; + background-position: -571px -1198px; width: 60px; height: 60px; } .hair_base_1_brown { background-image: url(spritesmith-main-1.png); - background-position: 0px -1183px; + background-position: -637px -1183px; width: 90px; height: 90px; } .customize-option.hair_base_1_brown { background-image: url(spritesmith-main-1.png); - background-position: -25px -1198px; + background-position: -662px -1198px; width: 60px; height: 60px; } .hair_base_1_candycane { background-image: url(spritesmith-main-1.png); - background-position: -91px -1183px; + background-position: -728px -1183px; width: 90px; height: 90px; } .customize-option.hair_base_1_candycane { background-image: url(spritesmith-main-1.png); - background-position: -116px -1198px; + background-position: -753px -1198px; width: 60px; height: 60px; } .hair_base_1_candycorn { background-image: url(spritesmith-main-1.png); - background-position: -182px -1183px; + background-position: -819px -1183px; width: 90px; height: 90px; } .customize-option.hair_base_1_candycorn { background-image: url(spritesmith-main-1.png); - background-position: -207px -1198px; + background-position: -844px -1198px; width: 60px; height: 60px; } .hair_base_1_festive { background-image: url(spritesmith-main-1.png); - background-position: -273px -1183px; + background-position: -910px -1183px; width: 90px; height: 90px; } .customize-option.hair_base_1_festive { background-image: url(spritesmith-main-1.png); - background-position: -298px -1198px; + background-position: -935px -1198px; width: 60px; height: 60px; } .hair_base_1_frost { background-image: url(spritesmith-main-1.png); - background-position: -364px -1183px; + background-position: -1001px -1183px; width: 90px; height: 90px; } .customize-option.hair_base_1_frost { background-image: url(spritesmith-main-1.png); - background-position: -389px -1198px; + background-position: -1026px -1198px; width: 60px; height: 60px; } .hair_base_1_ghostwhite { background-image: url(spritesmith-main-1.png); - background-position: -455px -1183px; + background-position: -1092px -1183px; width: 90px; height: 90px; } .customize-option.hair_base_1_ghostwhite { background-image: url(spritesmith-main-1.png); - background-position: -480px -1198px; + background-position: -1117px -1198px; width: 60px; height: 60px; } .hair_base_1_green { background-image: url(spritesmith-main-1.png); - background-position: -546px -1183px; + background-position: -1183px -1183px; width: 90px; height: 90px; } .customize-option.hair_base_1_green { background-image: url(spritesmith-main-1.png); - background-position: -571px -1198px; + background-position: -1208px -1198px; width: 60px; height: 60px; } .hair_base_1_halloween { background-image: url(spritesmith-main-1.png); - background-position: -637px -1183px; + background-position: -1274px 0px; width: 90px; height: 90px; } .customize-option.hair_base_1_halloween { background-image: url(spritesmith-main-1.png); - background-position: -662px -1198px; + background-position: -1299px -15px; width: 60px; height: 60px; } .hair_base_1_holly { background-image: url(spritesmith-main-1.png); - background-position: -728px -1183px; + background-position: -1274px -91px; width: 90px; height: 90px; } .customize-option.hair_base_1_holly { background-image: url(spritesmith-main-1.png); - background-position: -753px -1198px; + background-position: -1299px -106px; width: 60px; height: 60px; } .hair_base_1_hollygreen { background-image: url(spritesmith-main-1.png); - background-position: -819px -1183px; + background-position: -1274px -182px; width: 90px; height: 90px; } .customize-option.hair_base_1_hollygreen { background-image: url(spritesmith-main-1.png); - background-position: -844px -1198px; + background-position: -1299px -197px; width: 60px; height: 60px; } .hair_base_1_midnight { background-image: url(spritesmith-main-1.png); - background-position: -910px -1183px; + background-position: -1274px -273px; width: 90px; height: 90px; } .customize-option.hair_base_1_midnight { background-image: url(spritesmith-main-1.png); - background-position: -935px -1198px; + background-position: -1299px -288px; width: 60px; height: 60px; } .hair_base_1_pblue { background-image: url(spritesmith-main-1.png); - background-position: -1001px -1183px; + background-position: -1274px -364px; width: 90px; height: 90px; } .customize-option.hair_base_1_pblue { background-image: url(spritesmith-main-1.png); - background-position: -1026px -1198px; + background-position: -1299px -379px; width: 60px; height: 60px; } .hair_base_1_pblue2 { background-image: url(spritesmith-main-1.png); - background-position: -1092px -1183px; + background-position: -1274px -455px; width: 90px; height: 90px; } .customize-option.hair_base_1_pblue2 { background-image: url(spritesmith-main-1.png); - background-position: -1117px -1198px; + background-position: -1299px -470px; width: 60px; height: 60px; } .hair_base_1_peppermint { background-image: url(spritesmith-main-1.png); - background-position: -1183px -1183px; + background-position: -1274px -546px; width: 90px; height: 90px; } .customize-option.hair_base_1_peppermint { background-image: url(spritesmith-main-1.png); - background-position: -1208px -1198px; + background-position: -1299px -561px; width: 60px; height: 60px; } .hair_base_1_pgreen { background-image: url(spritesmith-main-1.png); - background-position: -1274px 0px; + background-position: -1274px -637px; width: 90px; height: 90px; } .customize-option.hair_base_1_pgreen { background-image: url(spritesmith-main-1.png); - background-position: -1299px -15px; + background-position: -1299px -652px; width: 60px; height: 60px; } .hair_base_1_pgreen2 { background-image: url(spritesmith-main-1.png); - background-position: -1274px -91px; + background-position: -1274px -728px; width: 90px; height: 90px; } .customize-option.hair_base_1_pgreen2 { background-image: url(spritesmith-main-1.png); - background-position: -1299px -106px; + background-position: -1299px -743px; width: 60px; height: 60px; } .hair_base_1_porange { background-image: url(spritesmith-main-1.png); - background-position: -1274px -182px; + background-position: -1274px -819px; width: 90px; height: 90px; } .customize-option.hair_base_1_porange { background-image: url(spritesmith-main-1.png); - background-position: -1299px -197px; + background-position: -1299px -834px; width: 60px; height: 60px; } .hair_base_1_porange2 { background-image: url(spritesmith-main-1.png); - background-position: -1274px -273px; + background-position: -1274px -910px; width: 90px; height: 90px; } .customize-option.hair_base_1_porange2 { background-image: url(spritesmith-main-1.png); - background-position: -1299px -288px; + background-position: -1299px -925px; width: 60px; height: 60px; } .hair_base_1_ppink { background-image: url(spritesmith-main-1.png); - background-position: -1274px -364px; + background-position: -1274px -1001px; width: 90px; height: 90px; } .customize-option.hair_base_1_ppink { background-image: url(spritesmith-main-1.png); - background-position: -1299px -379px; + background-position: -1299px -1016px; width: 60px; height: 60px; } .hair_base_1_ppink2 { background-image: url(spritesmith-main-1.png); - background-position: -1274px -455px; + background-position: -1274px -1092px; width: 90px; height: 90px; } .customize-option.hair_base_1_ppink2 { background-image: url(spritesmith-main-1.png); - background-position: -1299px -470px; + background-position: -1299px -1107px; width: 60px; height: 60px; } .hair_base_1_ppurple { background-image: url(spritesmith-main-1.png); - background-position: -1274px -546px; + background-position: -1274px -1183px; width: 90px; height: 90px; } .customize-option.hair_base_1_ppurple { background-image: url(spritesmith-main-1.png); - background-position: -1299px -561px; + background-position: -1299px -1198px; width: 60px; height: 60px; } .hair_base_1_ppurple2 { background-image: url(spritesmith-main-1.png); - background-position: -1274px -637px; + background-position: 0px -1274px; width: 90px; height: 90px; } .customize-option.hair_base_1_ppurple2 { background-image: url(spritesmith-main-1.png); - background-position: -1299px -652px; + background-position: -25px -1289px; width: 60px; height: 60px; } .hair_base_1_pumpkin { background-image: url(spritesmith-main-1.png); - background-position: -1274px -728px; + background-position: -91px -1274px; width: 90px; height: 90px; } .customize-option.hair_base_1_pumpkin { background-image: url(spritesmith-main-1.png); - background-position: -1299px -743px; + background-position: -116px -1289px; width: 60px; height: 60px; } .hair_base_1_purple { background-image: url(spritesmith-main-1.png); - background-position: -1274px -819px; + background-position: -182px -1274px; width: 90px; height: 90px; } .customize-option.hair_base_1_purple { background-image: url(spritesmith-main-1.png); - background-position: -1299px -834px; + background-position: -207px -1289px; width: 60px; height: 60px; } .hair_base_1_pyellow { background-image: url(spritesmith-main-1.png); - background-position: -1274px -910px; + background-position: -273px -1274px; width: 90px; height: 90px; } .customize-option.hair_base_1_pyellow { background-image: url(spritesmith-main-1.png); - background-position: -1299px -925px; + background-position: -298px -1289px; width: 60px; height: 60px; } .hair_base_1_pyellow2 { background-image: url(spritesmith-main-1.png); - background-position: -1274px -1001px; + background-position: -364px -1274px; width: 90px; height: 90px; } .customize-option.hair_base_1_pyellow2 { background-image: url(spritesmith-main-1.png); - background-position: -1299px -1016px; + background-position: -389px -1289px; width: 60px; height: 60px; } .hair_base_1_rainbow { background-image: url(spritesmith-main-1.png); - background-position: -1274px -1092px; + background-position: -455px -1274px; width: 90px; height: 90px; } .customize-option.hair_base_1_rainbow { background-image: url(spritesmith-main-1.png); - background-position: -1299px -1107px; + background-position: -480px -1289px; width: 60px; height: 60px; } .hair_base_1_red { background-image: url(spritesmith-main-1.png); - background-position: -1274px -1183px; + background-position: -546px -1274px; width: 90px; height: 90px; } .customize-option.hair_base_1_red { background-image: url(spritesmith-main-1.png); - background-position: -1299px -1198px; + background-position: -571px -1289px; width: 60px; height: 60px; } .hair_base_1_snowy { background-image: url(spritesmith-main-1.png); - background-position: 0px -1274px; + background-position: -637px -1274px; width: 90px; height: 90px; } .customize-option.hair_base_1_snowy { background-image: url(spritesmith-main-1.png); - background-position: -25px -1289px; + background-position: -662px -1289px; width: 60px; height: 60px; } .hair_base_1_white { background-image: url(spritesmith-main-1.png); - background-position: -182px -1274px; + background-position: -819px -1274px; width: 90px; height: 90px; } .customize-option.hair_base_1_white { background-image: url(spritesmith-main-1.png); - background-position: -207px -1289px; + background-position: -844px -1289px; width: 60px; height: 60px; } .hair_base_1_winternight { background-image: url(spritesmith-main-1.png); - background-position: -273px -1274px; + background-position: -910px -1274px; width: 90px; height: 90px; } .customize-option.hair_base_1_winternight { background-image: url(spritesmith-main-1.png); - background-position: -298px -1289px; + background-position: -935px -1289px; width: 60px; height: 60px; } .hair_base_1_winterstar { background-image: url(spritesmith-main-1.png); - background-position: -364px -1274px; + background-position: -1001px -1274px; width: 90px; height: 90px; } .customize-option.hair_base_1_winterstar { background-image: url(spritesmith-main-1.png); - background-position: -389px -1289px; + background-position: -1026px -1289px; width: 60px; height: 60px; } .hair_base_1_yellow { background-image: url(spritesmith-main-1.png); - background-position: -455px -1274px; + background-position: -1092px -1274px; width: 90px; height: 90px; } .customize-option.hair_base_1_yellow { background-image: url(spritesmith-main-1.png); - background-position: -480px -1289px; + background-position: -1117px -1289px; width: 60px; height: 60px; } .hair_base_1_zombie { background-image: url(spritesmith-main-1.png); - background-position: -546px -1274px; + background-position: -1183px -1274px; width: 90px; height: 90px; } .customize-option.hair_base_1_zombie { background-image: url(spritesmith-main-1.png); - background-position: -571px -1289px; + background-position: -1208px -1289px; width: 60px; height: 60px; } diff --git a/common/dist/sprites/spritesmith-main-1.png b/common/dist/sprites/spritesmith-main-1.png index f4dcd1da15..f6f7e0f6a0 100644 Binary files a/common/dist/sprites/spritesmith-main-1.png and b/common/dist/sprites/spritesmith-main-1.png differ diff --git a/common/dist/sprites/spritesmith-main-10.css b/common/dist/sprites/spritesmith-main-10.css index e074419b82..098845cbaf 100644 --- a/common/dist/sprites/spritesmith-main-10.css +++ b/common/dist/sprites/spritesmith-main-10.css @@ -1,1566 +1,1524 @@ -.Mount_Head_Sabretooth-Golden { - background-image: url(spritesmith-main-10.png); - background-position: -136px 0px; - width: 135px; - height: 135px; -} -.Mount_Head_Sabretooth-Red { - background-image: url(spritesmith-main-10.png); - background-position: -544px -272px; - width: 135px; - height: 135px; -} -.Mount_Head_Sabretooth-Shade { - background-image: url(spritesmith-main-10.png); - background-position: 0px -136px; - width: 135px; - height: 135px; -} -.Mount_Head_Sabretooth-Skeleton { - background-image: url(spritesmith-main-10.png); - background-position: -136px -136px; - width: 135px; - height: 135px; -} -.Mount_Head_Sabretooth-White { - background-image: url(spritesmith-main-10.png); - background-position: -272px 0px; - width: 135px; - height: 135px; -} -.Mount_Head_Sabretooth-Zombie { - background-image: url(spritesmith-main-10.png); - background-position: -272px -136px; - width: 135px; - height: 135px; -} -.Mount_Head_Seahorse-Base { - background-image: url(spritesmith-main-10.png); - background-position: -1346px -954px; - width: 105px; - height: 105px; -} -.Mount_Head_Seahorse-CottonCandyBlue { - background-image: url(spritesmith-main-10.png); - background-position: -1346px -848px; - width: 105px; - height: 105px; -} -.Mount_Head_Seahorse-CottonCandyPink { - background-image: url(spritesmith-main-10.png); - background-position: -1346px -742px; - width: 105px; - height: 105px; -} -.Mount_Head_Seahorse-Desert { - background-image: url(spritesmith-main-10.png); - background-position: -1346px -636px; - width: 105px; - height: 105px; -} -.Mount_Head_Seahorse-Golden { - background-image: url(spritesmith-main-10.png); - background-position: -1346px -530px; - width: 105px; - height: 105px; -} -.Mount_Head_Seahorse-Red { - background-image: url(spritesmith-main-10.png); - background-position: -1346px -424px; - width: 105px; - height: 105px; -} -.Mount_Head_Seahorse-Shade { - background-image: url(spritesmith-main-10.png); - background-position: -1346px -318px; - width: 105px; - height: 105px; -} -.Mount_Head_Seahorse-Skeleton { - background-image: url(spritesmith-main-10.png); - background-position: -1346px -212px; - width: 105px; - height: 105px; -} -.Mount_Head_Seahorse-White { - background-image: url(spritesmith-main-10.png); - background-position: -1346px -106px; - width: 105px; - height: 105px; -} -.Mount_Head_Seahorse-Zombie { - background-image: url(spritesmith-main-10.png); - background-position: -1346px 0px; - width: 105px; - height: 105px; -} -.Mount_Head_Sheep-Base { - background-image: url(spritesmith-main-10.png); - background-position: -1166px -1210px; - width: 105px; - height: 105px; -} -.Mount_Head_Sheep-CottonCandyBlue { - background-image: url(spritesmith-main-10.png); - background-position: -1060px -1210px; - width: 105px; - height: 105px; -} -.Mount_Head_Sheep-CottonCandyPink { - background-image: url(spritesmith-main-10.png); - background-position: -954px -1210px; - width: 105px; - height: 105px; -} -.Mount_Head_Sheep-Desert { - background-image: url(spritesmith-main-10.png); - background-position: -1134px -954px; - width: 105px; - height: 105px; -} -.Mount_Head_Sheep-Golden { +.Mount_Head_Rooster-White { background-image: url(spritesmith-main-10.png); background-position: -1134px -848px; width: 105px; height: 105px; } -.Mount_Head_Sheep-Red { +.Mount_Head_Rooster-Zombie { background-image: url(spritesmith-main-10.png); - background-position: -1134px -742px; + background-position: -848px -1240px; width: 105px; height: 105px; } -.Mount_Head_Sheep-Shade { - background-image: url(spritesmith-main-10.png); - background-position: -1134px -636px; - width: 105px; - height: 105px; -} -.Mount_Head_Sheep-Skeleton { - background-image: url(spritesmith-main-10.png); - background-position: -1134px -530px; - width: 105px; - height: 105px; -} -.Mount_Head_Sheep-White { - background-image: url(spritesmith-main-10.png); - background-position: -1134px -424px; - width: 105px; - height: 105px; -} -.Mount_Head_Sheep-Zombie { - background-image: url(spritesmith-main-10.png); - background-position: -1134px -318px; - width: 105px; - height: 105px; -} -.Mount_Head_Slime-Base { - background-image: url(spritesmith-main-10.png); - background-position: -1134px -212px; - width: 105px; - height: 105px; -} -.Mount_Head_Slime-CottonCandyBlue { - background-image: url(spritesmith-main-10.png); - background-position: -1134px -106px; - width: 105px; - height: 105px; -} -.Mount_Head_Slime-CottonCandyPink { - background-image: url(spritesmith-main-10.png); - background-position: -1134px 0px; - width: 105px; - height: 105px; -} -.Mount_Head_Slime-Desert { - background-image: url(spritesmith-main-10.png); - background-position: 0px -680px; - width: 105px; - height: 105px; -} -.Mount_Head_Slime-Golden { - background-image: url(spritesmith-main-10.png); - background-position: -1346px -1060px; - width: 105px; - height: 105px; -} -.Mount_Head_Slime-Red { - background-image: url(spritesmith-main-10.png); - background-position: -848px -998px; - width: 105px; - height: 105px; -} -.Mount_Head_Slime-Shade { - background-image: url(spritesmith-main-10.png); - background-position: -106px -680px; - width: 105px; - height: 105px; -} -.Mount_Head_Slime-Skeleton { - background-image: url(spritesmith-main-10.png); - background-position: -212px -680px; - width: 105px; - height: 105px; -} -.Mount_Head_Slime-White { - background-image: url(spritesmith-main-10.png); - background-position: -318px -680px; - width: 105px; - height: 105px; -} -.Mount_Head_Slime-Zombie { - background-image: url(spritesmith-main-10.png); - background-position: -424px -680px; - width: 105px; - height: 105px; -} -.Mount_Head_Snail-Base { - background-image: url(spritesmith-main-10.png); - background-position: -530px -680px; - width: 105px; - height: 105px; -} -.Mount_Head_Snail-CottonCandyBlue { - background-image: url(spritesmith-main-10.png); - background-position: -636px -680px; - width: 105px; - height: 105px; -} -.Mount_Head_Snail-CottonCandyPink { - background-image: url(spritesmith-main-10.png); - background-position: -816px 0px; - width: 105px; - height: 105px; -} -.Mount_Head_Snail-Desert { - background-image: url(spritesmith-main-10.png); - background-position: -816px -106px; - width: 105px; - height: 105px; -} -.Mount_Head_Snail-Golden { - background-image: url(spritesmith-main-10.png); - background-position: -816px -212px; - width: 105px; - height: 105px; -} -.Mount_Head_Snail-Red { - background-image: url(spritesmith-main-10.png); - background-position: -816px -318px; - width: 105px; - height: 105px; -} -.Mount_Head_Snail-Shade { - background-image: url(spritesmith-main-10.png); - background-position: -816px -424px; - width: 105px; - height: 105px; -} -.Mount_Head_Snail-Skeleton { - background-image: url(spritesmith-main-10.png); - background-position: -816px -530px; - width: 105px; - height: 105px; -} -.Mount_Head_Snail-White { - background-image: url(spritesmith-main-10.png); - background-position: -816px -636px; - width: 105px; - height: 105px; -} -.Mount_Head_Snail-Zombie { - background-image: url(spritesmith-main-10.png); - background-position: 0px -786px; - width: 105px; - height: 105px; -} -.Mount_Head_Snake-Base { - background-image: url(spritesmith-main-10.png); - background-position: -106px -786px; - width: 105px; - height: 105px; -} -.Mount_Head_Snake-CottonCandyBlue { - background-image: url(spritesmith-main-10.png); - background-position: -212px -786px; - width: 105px; - height: 105px; -} -.Mount_Head_Snake-CottonCandyPink { - background-image: url(spritesmith-main-10.png); - background-position: -318px -786px; - width: 105px; - height: 105px; -} -.Mount_Head_Snake-Desert { - background-image: url(spritesmith-main-10.png); - background-position: -424px -786px; - width: 105px; - height: 105px; -} -.Mount_Head_Snake-Golden { - background-image: url(spritesmith-main-10.png); - background-position: -530px -786px; - width: 105px; - height: 105px; -} -.Mount_Head_Snake-Red { - background-image: url(spritesmith-main-10.png); - background-position: -636px -786px; - width: 105px; - height: 105px; -} -.Mount_Head_Snake-Shade { - background-image: url(spritesmith-main-10.png); - background-position: -742px -786px; - width: 105px; - height: 105px; -} -.Mount_Head_Snake-Skeleton { - background-image: url(spritesmith-main-10.png); - background-position: -922px 0px; - width: 105px; - height: 105px; -} -.Mount_Head_Snake-White { - background-image: url(spritesmith-main-10.png); - background-position: -922px -106px; - width: 105px; - height: 105px; -} -.Mount_Head_Snake-Zombie { - background-image: url(spritesmith-main-10.png); - background-position: -922px -212px; - width: 105px; - height: 105px; -} -.Mount_Head_Spider-Base { - background-image: url(spritesmith-main-10.png); - background-position: -922px -318px; - width: 105px; - height: 105px; -} -.Mount_Head_Spider-CottonCandyBlue { - background-image: url(spritesmith-main-10.png); - background-position: -922px -424px; - width: 105px; - height: 105px; -} -.Mount_Head_Spider-CottonCandyPink { - background-image: url(spritesmith-main-10.png); - background-position: -922px -530px; - width: 105px; - height: 105px; -} -.Mount_Head_Spider-Desert { - background-image: url(spritesmith-main-10.png); - background-position: -922px -636px; - width: 105px; - height: 105px; -} -.Mount_Head_Spider-Golden { - background-image: url(spritesmith-main-10.png); - background-position: -922px -742px; - width: 105px; - height: 105px; -} -.Mount_Head_Spider-Red { - background-image: url(spritesmith-main-10.png); - background-position: 0px -892px; - width: 105px; - height: 105px; -} -.Mount_Head_Spider-Shade { - background-image: url(spritesmith-main-10.png); - background-position: -106px -892px; - width: 105px; - height: 105px; -} -.Mount_Head_Spider-Skeleton { - background-image: url(spritesmith-main-10.png); - background-position: -212px -892px; - width: 105px; - height: 105px; -} -.Mount_Head_Spider-White { - background-image: url(spritesmith-main-10.png); - background-position: -318px -892px; - width: 105px; - height: 105px; -} -.Mount_Head_Spider-Zombie { - background-image: url(spritesmith-main-10.png); - background-position: -424px -892px; - width: 105px; - height: 105px; -} -.Mount_Head_TRex-Base { - background-image: url(spritesmith-main-10.png); - background-position: -680px -408px; - width: 135px; - height: 135px; -} -.Mount_Head_TRex-CottonCandyBlue { - background-image: url(spritesmith-main-10.png); - background-position: -680px -272px; - width: 135px; - height: 135px; -} -.Mount_Head_TRex-CottonCandyPink { - background-image: url(spritesmith-main-10.png); - background-position: -680px -136px; - width: 135px; - height: 135px; -} -.Mount_Head_TRex-Desert { - background-image: url(spritesmith-main-10.png); - background-position: -680px 0px; - width: 135px; - height: 135px; -} -.Mount_Head_TRex-Golden { - background-image: url(spritesmith-main-10.png); - background-position: -544px -544px; - width: 135px; - height: 135px; -} -.Mount_Head_TRex-Red { - background-image: url(spritesmith-main-10.png); - background-position: -408px -544px; - width: 135px; - height: 135px; -} -.Mount_Head_TRex-Shade { - background-image: url(spritesmith-main-10.png); - background-position: -272px -544px; - width: 135px; - height: 135px; -} -.Mount_Head_TRex-Skeleton { - background-image: url(spritesmith-main-10.png); - background-position: -136px -544px; - width: 135px; - height: 135px; -} -.Mount_Head_TRex-White { - background-image: url(spritesmith-main-10.png); - background-position: 0px -544px; - width: 135px; - height: 135px; -} -.Mount_Head_TRex-Zombie { - background-image: url(spritesmith-main-10.png); - background-position: -544px -408px; - width: 135px; - height: 135px; -} -.Mount_Head_TigerCub-Base { - background-image: url(spritesmith-main-10.png); - background-position: -530px -892px; - width: 105px; - height: 105px; -} -.Mount_Head_TigerCub-CottonCandyBlue { - background-image: url(spritesmith-main-10.png); - background-position: -636px -892px; - width: 105px; - height: 105px; -} -.Mount_Head_TigerCub-CottonCandyPink { - background-image: url(spritesmith-main-10.png); - background-position: -742px -892px; - width: 105px; - height: 105px; -} -.Mount_Head_TigerCub-Desert { - background-image: url(spritesmith-main-10.png); - background-position: -848px -892px; - width: 105px; - height: 105px; -} -.Mount_Head_TigerCub-Floral { - background-image: url(spritesmith-main-10.png); - background-position: -1028px 0px; - width: 105px; - height: 105px; -} -.Mount_Head_TigerCub-Golden { - background-image: url(spritesmith-main-10.png); - background-position: -1028px -106px; - width: 105px; - height: 105px; -} -.Mount_Head_TigerCub-Peppermint { - background-image: url(spritesmith-main-10.png); - background-position: -1028px -212px; - width: 105px; - height: 105px; -} -.Mount_Head_TigerCub-Red { - background-image: url(spritesmith-main-10.png); - background-position: -1028px -318px; - width: 105px; - height: 105px; -} -.Mount_Head_TigerCub-Shade { - background-image: url(spritesmith-main-10.png); - background-position: -1028px -424px; - width: 105px; - height: 105px; -} -.Mount_Head_TigerCub-Skeleton { - background-image: url(spritesmith-main-10.png); - background-position: -1028px -530px; - width: 105px; - height: 105px; -} -.Mount_Head_TigerCub-Spooky { - background-image: url(spritesmith-main-10.png); - background-position: -1028px -636px; - width: 105px; - height: 105px; -} -.Mount_Head_TigerCub-White { - background-image: url(spritesmith-main-10.png); - background-position: -1028px -742px; - width: 105px; - height: 105px; -} -.Mount_Head_TigerCub-Zombie { - background-image: url(spritesmith-main-10.png); - background-position: -1028px -848px; - width: 105px; - height: 105px; -} -.Mount_Head_Treeling-Base { - background-image: url(spritesmith-main-10.png); - background-position: 0px -998px; - width: 105px; - height: 105px; -} -.Mount_Head_Treeling-CottonCandyBlue { - background-image: url(spritesmith-main-10.png); - background-position: -106px -998px; - width: 105px; - height: 105px; -} -.Mount_Head_Treeling-CottonCandyPink { - background-image: url(spritesmith-main-10.png); - background-position: -212px -998px; - width: 105px; - height: 105px; -} -.Mount_Head_Treeling-Desert { - background-image: url(spritesmith-main-10.png); - background-position: -318px -998px; - width: 105px; - height: 105px; -} -.Mount_Head_Treeling-Golden { - background-image: url(spritesmith-main-10.png); - background-position: -424px -998px; - width: 105px; - height: 105px; -} -.Mount_Head_Treeling-Red { - background-image: url(spritesmith-main-10.png); - background-position: -530px -998px; - width: 105px; - height: 105px; -} -.Mount_Head_Treeling-Shade { - background-image: url(spritesmith-main-10.png); - background-position: -636px -998px; - width: 105px; - height: 105px; -} -.Mount_Head_Treeling-Skeleton { - background-image: url(spritesmith-main-10.png); - background-position: -742px -998px; - width: 105px; - height: 105px; -} -.Mount_Head_Treeling-White { - background-image: url(spritesmith-main-10.png); - background-position: -680px -544px; - width: 105px; - height: 105px; -} -.Mount_Head_Treeling-Zombie { - background-image: url(spritesmith-main-10.png); - background-position: -954px -998px; - width: 105px; - height: 105px; -} -.Mount_Head_Turkey-Base { - background-image: url(spritesmith-main-10.png); - background-position: 0px -1104px; - width: 105px; - height: 105px; -} -.Mount_Head_Turtle-Base { - background-image: url(spritesmith-main-10.png); - background-position: -106px -1104px; - width: 105px; - height: 105px; -} -.Mount_Head_Turtle-CottonCandyBlue { - background-image: url(spritesmith-main-10.png); - background-position: -212px -1104px; - width: 105px; - height: 105px; -} -.Mount_Head_Turtle-CottonCandyPink { - background-image: url(spritesmith-main-10.png); - background-position: -318px -1104px; - width: 105px; - height: 105px; -} -.Mount_Head_Turtle-Desert { - background-image: url(spritesmith-main-10.png); - background-position: -424px -1104px; - width: 105px; - height: 105px; -} -.Mount_Head_Turtle-Golden { - background-image: url(spritesmith-main-10.png); - background-position: -530px -1104px; - width: 105px; - height: 105px; -} -.Mount_Head_Turtle-Red { - background-image: url(spritesmith-main-10.png); - background-position: -636px -1104px; - width: 105px; - height: 105px; -} -.Mount_Head_Turtle-Shade { - background-image: url(spritesmith-main-10.png); - background-position: -742px -1104px; - width: 105px; - height: 105px; -} -.Mount_Head_Turtle-Skeleton { - background-image: url(spritesmith-main-10.png); - background-position: -848px -1104px; - width: 105px; - height: 105px; -} -.Mount_Head_Turtle-White { - background-image: url(spritesmith-main-10.png); - background-position: -954px -1104px; - width: 105px; - height: 105px; -} -.Mount_Head_Turtle-Zombie { - background-image: url(spritesmith-main-10.png); - background-position: -1060px -1104px; - width: 105px; - height: 105px; -} -.Mount_Head_Unicorn-Base { - background-image: url(spritesmith-main-10.png); - background-position: -1240px 0px; - width: 105px; - height: 105px; -} -.Mount_Head_Unicorn-CottonCandyBlue { - background-image: url(spritesmith-main-10.png); - background-position: -1240px -106px; - width: 105px; - height: 105px; -} -.Mount_Head_Unicorn-CottonCandyPink { - background-image: url(spritesmith-main-10.png); - background-position: -1240px -212px; - width: 105px; - height: 105px; -} -.Mount_Head_Unicorn-Desert { - background-image: url(spritesmith-main-10.png); - background-position: -1240px -318px; - width: 105px; - height: 105px; -} -.Mount_Head_Unicorn-Golden { - background-image: url(spritesmith-main-10.png); - background-position: -1240px -424px; - width: 105px; - height: 105px; -} -.Mount_Head_Unicorn-Red { - background-image: url(spritesmith-main-10.png); - background-position: -1240px -530px; - width: 105px; - height: 105px; -} -.Mount_Head_Unicorn-Shade { - background-image: url(spritesmith-main-10.png); - background-position: -1240px -636px; - width: 105px; - height: 105px; -} -.Mount_Head_Unicorn-Skeleton { - background-image: url(spritesmith-main-10.png); - background-position: -1240px -742px; - width: 105px; - height: 105px; -} -.Mount_Head_Unicorn-White { - background-image: url(spritesmith-main-10.png); - background-position: -1240px -848px; - width: 105px; - height: 105px; -} -.Mount_Head_Unicorn-Zombie { - background-image: url(spritesmith-main-10.png); - background-position: -1240px -954px; - width: 105px; - height: 105px; -} -.Mount_Head_Whale-Base { - background-image: url(spritesmith-main-10.png); - background-position: -1240px -1060px; - width: 105px; - height: 105px; -} -.Mount_Head_Whale-CottonCandyBlue { - background-image: url(spritesmith-main-10.png); - background-position: 0px -1210px; - width: 105px; - height: 105px; -} -.Mount_Head_Whale-CottonCandyPink { - background-image: url(spritesmith-main-10.png); - background-position: -106px -1210px; - width: 105px; - height: 105px; -} -.Mount_Head_Whale-Desert { - background-image: url(spritesmith-main-10.png); - background-position: -212px -1210px; - width: 105px; - height: 105px; -} -.Mount_Head_Whale-Golden { - background-image: url(spritesmith-main-10.png); - background-position: -318px -1210px; - width: 105px; - height: 105px; -} -.Mount_Head_Whale-Red { - background-image: url(spritesmith-main-10.png); - background-position: -424px -1210px; - width: 105px; - height: 105px; -} -.Mount_Head_Whale-Shade { - background-image: url(spritesmith-main-10.png); - background-position: -530px -1210px; - width: 105px; - height: 105px; -} -.Mount_Head_Whale-Skeleton { - background-image: url(spritesmith-main-10.png); - background-position: -636px -1210px; - width: 105px; - height: 105px; -} -.Mount_Head_Whale-White { - background-image: url(spritesmith-main-10.png); - background-position: -742px -1210px; - width: 105px; - height: 105px; -} -.Mount_Head_Whale-Zombie { - background-image: url(spritesmith-main-10.png); - background-position: -848px -1210px; - width: 105px; - height: 105px; -} -.Mount_Head_Wolf-Base { - background-image: url(spritesmith-main-10.png); - background-position: 0px 0px; - width: 135px; - height: 135px; -} -.Mount_Head_Wolf-CottonCandyBlue { +.Mount_Head_Sabretooth-Base { background-image: url(spritesmith-main-10.png); background-position: -544px -136px; width: 135px; height: 135px; } -.Mount_Head_Wolf-CottonCandyPink { +.Mount_Head_Sabretooth-CottonCandyBlue { background-image: url(spritesmith-main-10.png); - background-position: -544px 0px; + background-position: 0px -136px; width: 135px; height: 135px; } -.Mount_Head_Wolf-Desert { +.Mount_Head_Sabretooth-CottonCandyPink { background-image: url(spritesmith-main-10.png); - background-position: -408px -408px; + background-position: -136px -136px; width: 135px; height: 135px; } -.Mount_Head_Wolf-Floral { +.Mount_Head_Sabretooth-Desert { background-image: url(spritesmith-main-10.png); - background-position: -272px -408px; + background-position: -272px 0px; width: 135px; height: 135px; } -.Mount_Head_Wolf-Golden { +.Mount_Head_Sabretooth-Golden { background-image: url(spritesmith-main-10.png); - background-position: -136px -408px; + background-position: -272px -136px; width: 135px; height: 135px; } -.Mount_Head_Wolf-Peppermint { - background-image: url(spritesmith-main-10.png); - background-position: 0px -408px; - width: 135px; - height: 135px; -} -.Mount_Head_Wolf-Red { - background-image: url(spritesmith-main-10.png); - background-position: -408px -272px; - width: 135px; - height: 135px; -} -.Mount_Head_Wolf-Shade { - background-image: url(spritesmith-main-10.png); - background-position: -408px -136px; - width: 135px; - height: 135px; -} -.Mount_Head_Wolf-Skeleton { - background-image: url(spritesmith-main-10.png); - background-position: -408px 0px; - width: 135px; - height: 135px; -} -.Mount_Head_Wolf-Spooky { - background-image: url(spritesmith-main-10.png); - background-position: -272px -272px; - width: 135px; - height: 135px; -} -.Mount_Head_Wolf-White { - background-image: url(spritesmith-main-10.png); - background-position: -136px -272px; - width: 135px; - height: 135px; -} -.Mount_Head_Wolf-Zombie { +.Mount_Head_Sabretooth-Red { background-image: url(spritesmith-main-10.png); background-position: 0px -272px; width: 135px; height: 135px; } -.Mount_Icon_Axolotl-Base { +.Mount_Head_Sabretooth-Shade { + background-image: url(spritesmith-main-10.png); + background-position: -136px -272px; + width: 135px; + height: 135px; +} +.Mount_Head_Sabretooth-Skeleton { + background-image: url(spritesmith-main-10.png); + background-position: -272px -272px; + width: 135px; + height: 135px; +} +.Mount_Head_Sabretooth-White { + background-image: url(spritesmith-main-10.png); + background-position: -408px 0px; + width: 135px; + height: 135px; +} +.Mount_Head_Sabretooth-Zombie { + background-image: url(spritesmith-main-10.png); + background-position: -408px -136px; + width: 135px; + height: 135px; +} +.Mount_Head_Seahorse-Base { + background-image: url(spritesmith-main-10.png); + background-position: -1134px -954px; + width: 105px; + height: 105px; +} +.Mount_Head_Seahorse-CottonCandyBlue { + background-image: url(spritesmith-main-10.png); + background-position: 0px -1134px; + width: 105px; + height: 105px; +} +.Mount_Head_Seahorse-CottonCandyPink { + background-image: url(spritesmith-main-10.png); + background-position: -106px -1134px; + width: 105px; + height: 105px; +} +.Mount_Head_Seahorse-Desert { + background-image: url(spritesmith-main-10.png); + background-position: -212px -1134px; + width: 105px; + height: 105px; +} +.Mount_Head_Seahorse-Golden { + background-image: url(spritesmith-main-10.png); + background-position: -318px -1134px; + width: 105px; + height: 105px; +} +.Mount_Head_Seahorse-Red { + background-image: url(spritesmith-main-10.png); + background-position: -424px -1134px; + width: 105px; + height: 105px; +} +.Mount_Head_Seahorse-Shade { + background-image: url(spritesmith-main-10.png); + background-position: -530px -1134px; + width: 105px; + height: 105px; +} +.Mount_Head_Seahorse-Skeleton { + background-image: url(spritesmith-main-10.png); + background-position: -636px -1134px; + width: 105px; + height: 105px; +} +.Mount_Head_Seahorse-White { + background-image: url(spritesmith-main-10.png); + background-position: -742px -1134px; + width: 105px; + height: 105px; +} +.Mount_Head_Seahorse-Zombie { + background-image: url(spritesmith-main-10.png); + background-position: -1346px -530px; + width: 105px; + height: 105px; +} +.Mount_Head_Sheep-Base { + background-image: url(spritesmith-main-10.png); + background-position: -1346px -636px; + width: 105px; + height: 105px; +} +.Mount_Head_Sheep-CottonCandyBlue { + background-image: url(spritesmith-main-10.png); + background-position: -1346px -742px; + width: 105px; + height: 105px; +} +.Mount_Head_Sheep-CottonCandyPink { + background-image: url(spritesmith-main-10.png); + background-position: -1346px -848px; + width: 105px; + height: 105px; +} +.Mount_Head_Sheep-Desert { + background-image: url(spritesmith-main-10.png); + background-position: -1346px -954px; + width: 105px; + height: 105px; +} +.Mount_Head_Sheep-Golden { + background-image: url(spritesmith-main-10.png); + background-position: -1346px -1060px; + width: 105px; + height: 105px; +} +.Mount_Head_Sheep-Red { background-image: url(spritesmith-main-10.png); background-position: -1346px -1166px; + width: 105px; + height: 105px; +} +.Mount_Head_Sheep-Shade { + background-image: url(spritesmith-main-10.png); + background-position: 0px -1346px; + width: 105px; + height: 105px; +} +.Mount_Head_Sheep-Skeleton { + background-image: url(spritesmith-main-10.png); + background-position: -106px -1346px; + width: 105px; + height: 105px; +} +.Mount_Head_Sheep-White { + background-image: url(spritesmith-main-10.png); + background-position: -212px -1346px; + width: 105px; + height: 105px; +} +.Mount_Head_Sheep-Zombie { + background-image: url(spritesmith-main-10.png); + background-position: -318px -1346px; + width: 105px; + height: 105px; +} +.Mount_Head_Slime-Base { + background-image: url(spritesmith-main-10.png); + background-position: -424px -1346px; + width: 105px; + height: 105px; +} +.Mount_Head_Slime-CottonCandyBlue { + background-image: url(spritesmith-main-10.png); + background-position: -530px -1346px; + width: 105px; + height: 105px; +} +.Mount_Head_Slime-CottonCandyPink { + background-image: url(spritesmith-main-10.png); + background-position: -514px -680px; + width: 105px; + height: 105px; +} +.Mount_Head_Slime-Desert { + background-image: url(spritesmith-main-10.png); + background-position: -620px -680px; + width: 105px; + height: 105px; +} +.Mount_Head_Slime-Golden { + background-image: url(spritesmith-main-10.png); + background-position: -816px 0px; + width: 105px; + height: 105px; +} +.Mount_Head_Slime-Red { + background-image: url(spritesmith-main-10.png); + background-position: -816px -106px; + width: 105px; + height: 105px; +} +.Mount_Head_Slime-Shade { + background-image: url(spritesmith-main-10.png); + background-position: -816px -212px; + width: 105px; + height: 105px; +} +.Mount_Head_Slime-Skeleton { + background-image: url(spritesmith-main-10.png); + background-position: -816px -318px; + width: 105px; + height: 105px; +} +.Mount_Head_Slime-White { + background-image: url(spritesmith-main-10.png); + background-position: -816px -424px; + width: 105px; + height: 105px; +} +.Mount_Head_Slime-Zombie { + background-image: url(spritesmith-main-10.png); + background-position: -816px -530px; + width: 105px; + height: 105px; +} +.Mount_Head_Snail-Base { + background-image: url(spritesmith-main-10.png); + background-position: -816px -636px; + width: 105px; + height: 105px; +} +.Mount_Head_Snail-CottonCandyBlue { + background-image: url(spritesmith-main-10.png); + background-position: 0px -816px; + width: 105px; + height: 105px; +} +.Mount_Head_Snail-CottonCandyPink { + background-image: url(spritesmith-main-10.png); + background-position: -106px -816px; + width: 105px; + height: 105px; +} +.Mount_Head_Snail-Desert { + background-image: url(spritesmith-main-10.png); + background-position: -212px -816px; + width: 105px; + height: 105px; +} +.Mount_Head_Snail-Golden { + background-image: url(spritesmith-main-10.png); + background-position: -318px -816px; + width: 105px; + height: 105px; +} +.Mount_Head_Snail-Red { + background-image: url(spritesmith-main-10.png); + background-position: -424px -816px; + width: 105px; + height: 105px; +} +.Mount_Head_Snail-Shade { + background-image: url(spritesmith-main-10.png); + background-position: -530px -816px; + width: 105px; + height: 105px; +} +.Mount_Head_Snail-Skeleton { + background-image: url(spritesmith-main-10.png); + background-position: -636px -816px; + width: 105px; + height: 105px; +} +.Mount_Head_Snail-White { + background-image: url(spritesmith-main-10.png); + background-position: -742px -816px; + width: 105px; + height: 105px; +} +.Mount_Head_Snail-Zombie { + background-image: url(spritesmith-main-10.png); + background-position: -922px 0px; + width: 105px; + height: 105px; +} +.Mount_Head_Snake-Base { + background-image: url(spritesmith-main-10.png); + background-position: -922px -106px; + width: 105px; + height: 105px; +} +.Mount_Head_Snake-CottonCandyBlue { + background-image: url(spritesmith-main-10.png); + background-position: -922px -212px; + width: 105px; + height: 105px; +} +.Mount_Head_Snake-CottonCandyPink { + background-image: url(spritesmith-main-10.png); + background-position: -922px -318px; + width: 105px; + height: 105px; +} +.Mount_Head_Snake-Desert { + background-image: url(spritesmith-main-10.png); + background-position: -922px -424px; + width: 105px; + height: 105px; +} +.Mount_Head_Snake-Golden { + background-image: url(spritesmith-main-10.png); + background-position: -922px -530px; + width: 105px; + height: 105px; +} +.Mount_Head_Snake-Red { + background-image: url(spritesmith-main-10.png); + background-position: -922px -636px; + width: 105px; + height: 105px; +} +.Mount_Head_Snake-Shade { + background-image: url(spritesmith-main-10.png); + background-position: -922px -742px; + width: 105px; + height: 105px; +} +.Mount_Head_Snake-Skeleton { + background-image: url(spritesmith-main-10.png); + background-position: 0px -922px; + width: 105px; + height: 105px; +} +.Mount_Head_Snake-White { + background-image: url(spritesmith-main-10.png); + background-position: -106px -922px; + width: 105px; + height: 105px; +} +.Mount_Head_Snake-Zombie { + background-image: url(spritesmith-main-10.png); + background-position: -212px -922px; + width: 105px; + height: 105px; +} +.Mount_Head_Spider-Base { + background-image: url(spritesmith-main-10.png); + background-position: -318px -922px; + width: 105px; + height: 105px; +} +.Mount_Head_Spider-CottonCandyBlue { + background-image: url(spritesmith-main-10.png); + background-position: -424px -922px; + width: 105px; + height: 105px; +} +.Mount_Head_Spider-CottonCandyPink { + background-image: url(spritesmith-main-10.png); + background-position: -530px -922px; + width: 105px; + height: 105px; +} +.Mount_Head_Spider-Desert { + background-image: url(spritesmith-main-10.png); + background-position: -636px -922px; + width: 105px; + height: 105px; +} +.Mount_Head_Spider-Golden { + background-image: url(spritesmith-main-10.png); + background-position: -742px -922px; + width: 105px; + height: 105px; +} +.Mount_Head_Spider-Red { + background-image: url(spritesmith-main-10.png); + background-position: -848px -922px; + width: 105px; + height: 105px; +} +.Mount_Head_Spider-Shade { + background-image: url(spritesmith-main-10.png); + background-position: -1028px 0px; + width: 105px; + height: 105px; +} +.Mount_Head_Spider-Skeleton { + background-image: url(spritesmith-main-10.png); + background-position: -1028px -106px; + width: 105px; + height: 105px; +} +.Mount_Head_Spider-White { + background-image: url(spritesmith-main-10.png); + background-position: -1028px -212px; + width: 105px; + height: 105px; +} +.Mount_Head_Spider-Zombie { + background-image: url(spritesmith-main-10.png); + background-position: -1028px -318px; + width: 105px; + height: 105px; +} +.Mount_Head_TRex-Base { + background-image: url(spritesmith-main-10.png); + background-position: -408px -272px; + width: 135px; + height: 135px; +} +.Mount_Head_TRex-CottonCandyBlue { + background-image: url(spritesmith-main-10.png); + background-position: 0px -408px; + width: 135px; + height: 135px; +} +.Mount_Head_TRex-CottonCandyPink { + background-image: url(spritesmith-main-10.png); + background-position: -136px -408px; + width: 135px; + height: 135px; +} +.Mount_Head_TRex-Desert { + background-image: url(spritesmith-main-10.png); + background-position: -272px -408px; + width: 135px; + height: 135px; +} +.Mount_Head_TRex-Golden { + background-image: url(spritesmith-main-10.png); + background-position: -408px -408px; + width: 135px; + height: 135px; +} +.Mount_Head_TRex-Red { + background-image: url(spritesmith-main-10.png); + background-position: -544px 0px; + width: 135px; + height: 135px; +} +.Mount_Head_TRex-Shade { + background-image: url(spritesmith-main-10.png); + background-position: 0px 0px; + width: 135px; + height: 135px; +} +.Mount_Head_TRex-Skeleton { + background-image: url(spritesmith-main-10.png); + background-position: -544px -272px; + width: 135px; + height: 135px; +} +.Mount_Head_TRex-White { + background-image: url(spritesmith-main-10.png); + background-position: -544px -408px; + width: 135px; + height: 135px; +} +.Mount_Head_TRex-Zombie { + background-image: url(spritesmith-main-10.png); + background-position: 0px -544px; + width: 135px; + height: 135px; +} +.Mount_Head_TigerCub-Base { + background-image: url(spritesmith-main-10.png); + background-position: -1028px -424px; + width: 105px; + height: 105px; +} +.Mount_Head_TigerCub-CottonCandyBlue { + background-image: url(spritesmith-main-10.png); + background-position: -1028px -530px; + width: 105px; + height: 105px; +} +.Mount_Head_TigerCub-CottonCandyPink { + background-image: url(spritesmith-main-10.png); + background-position: -1028px -636px; + width: 105px; + height: 105px; +} +.Mount_Head_TigerCub-Desert { + background-image: url(spritesmith-main-10.png); + background-position: -1028px -742px; + width: 105px; + height: 105px; +} +.Mount_Head_TigerCub-Floral { + background-image: url(spritesmith-main-10.png); + background-position: -1028px -848px; + width: 105px; + height: 105px; +} +.Mount_Head_TigerCub-Golden { + background-image: url(spritesmith-main-10.png); + background-position: 0px -1028px; + width: 105px; + height: 105px; +} +.Mount_Head_TigerCub-Peppermint { + background-image: url(spritesmith-main-10.png); + background-position: -106px -1028px; + width: 105px; + height: 105px; +} +.Mount_Head_TigerCub-Red { + background-image: url(spritesmith-main-10.png); + background-position: -212px -1028px; + width: 105px; + height: 105px; +} +.Mount_Head_TigerCub-Shade { + background-image: url(spritesmith-main-10.png); + background-position: -318px -1028px; + width: 105px; + height: 105px; +} +.Mount_Head_TigerCub-Skeleton { + background-image: url(spritesmith-main-10.png); + background-position: -424px -1028px; + width: 105px; + height: 105px; +} +.Mount_Head_TigerCub-Spooky { + background-image: url(spritesmith-main-10.png); + background-position: -530px -1028px; + width: 105px; + height: 105px; +} +.Mount_Head_TigerCub-White { + background-image: url(spritesmith-main-10.png); + background-position: -636px -1028px; + width: 105px; + height: 105px; +} +.Mount_Head_TigerCub-Zombie { + background-image: url(spritesmith-main-10.png); + background-position: -742px -1028px; + width: 105px; + height: 105px; +} +.Mount_Head_Treeling-Base { + background-image: url(spritesmith-main-10.png); + background-position: -848px -1028px; + width: 105px; + height: 105px; +} +.Mount_Head_Treeling-CottonCandyBlue { + background-image: url(spritesmith-main-10.png); + background-position: -954px -1028px; + width: 105px; + height: 105px; +} +.Mount_Head_Treeling-CottonCandyPink { + background-image: url(spritesmith-main-10.png); + background-position: -1134px 0px; + width: 105px; + height: 105px; +} +.Mount_Head_Treeling-Desert { + background-image: url(spritesmith-main-10.png); + background-position: -1134px -106px; + width: 105px; + height: 105px; +} +.Mount_Head_Treeling-Golden { + background-image: url(spritesmith-main-10.png); + background-position: -1134px -212px; + width: 105px; + height: 105px; +} +.Mount_Head_Treeling-Red { + background-image: url(spritesmith-main-10.png); + background-position: -1134px -318px; + width: 105px; + height: 105px; +} +.Mount_Head_Treeling-Shade { + background-image: url(spritesmith-main-10.png); + background-position: -1134px -424px; + width: 105px; + height: 105px; +} +.Mount_Head_Treeling-Skeleton { + background-image: url(spritesmith-main-10.png); + background-position: -1134px -530px; + width: 105px; + height: 105px; +} +.Mount_Head_Treeling-White { + background-image: url(spritesmith-main-10.png); + background-position: -1134px -636px; + width: 105px; + height: 105px; +} +.Mount_Head_Treeling-Zombie { + background-image: url(spritesmith-main-10.png); + background-position: -1134px -742px; + width: 105px; + height: 105px; +} +.Mount_Head_Turkey-Base { + background-image: url(spritesmith-main-10.png); + background-position: -848px -1134px; + width: 105px; + height: 105px; +} +.Mount_Head_Turtle-Base { + background-image: url(spritesmith-main-10.png); + background-position: -954px -1134px; + width: 105px; + height: 105px; +} +.Mount_Head_Turtle-CottonCandyBlue { + background-image: url(spritesmith-main-10.png); + background-position: -1060px -1134px; + width: 105px; + height: 105px; +} +.Mount_Head_Turtle-CottonCandyPink { + background-image: url(spritesmith-main-10.png); + background-position: -1240px 0px; + width: 105px; + height: 105px; +} +.Mount_Head_Turtle-Desert { + background-image: url(spritesmith-main-10.png); + background-position: -1240px -106px; + width: 105px; + height: 105px; +} +.Mount_Head_Turtle-Golden { + background-image: url(spritesmith-main-10.png); + background-position: -1240px -212px; + width: 105px; + height: 105px; +} +.Mount_Head_Turtle-Red { + background-image: url(spritesmith-main-10.png); + background-position: -1240px -318px; + width: 105px; + height: 105px; +} +.Mount_Head_Turtle-Shade { + background-image: url(spritesmith-main-10.png); + background-position: -1240px -424px; + width: 105px; + height: 105px; +} +.Mount_Head_Turtle-Skeleton { + background-image: url(spritesmith-main-10.png); + background-position: -1240px -530px; + width: 105px; + height: 105px; +} +.Mount_Head_Turtle-White { + background-image: url(spritesmith-main-10.png); + background-position: -1240px -636px; + width: 105px; + height: 105px; +} +.Mount_Head_Turtle-Zombie { + background-image: url(spritesmith-main-10.png); + background-position: -1240px -742px; + width: 105px; + height: 105px; +} +.Mount_Head_Unicorn-Base { + background-image: url(spritesmith-main-10.png); + background-position: -1240px -848px; + width: 105px; + height: 105px; +} +.Mount_Head_Unicorn-CottonCandyBlue { + background-image: url(spritesmith-main-10.png); + background-position: -1240px -954px; + width: 105px; + height: 105px; +} +.Mount_Head_Unicorn-CottonCandyPink { + background-image: url(spritesmith-main-10.png); + background-position: -1240px -1060px; + width: 105px; + height: 105px; +} +.Mount_Head_Unicorn-Desert { + background-image: url(spritesmith-main-10.png); + background-position: 0px -1240px; + width: 105px; + height: 105px; +} +.Mount_Head_Unicorn-Golden { + background-image: url(spritesmith-main-10.png); + background-position: -106px -1240px; + width: 105px; + height: 105px; +} +.Mount_Head_Unicorn-Red { + background-image: url(spritesmith-main-10.png); + background-position: -212px -1240px; + width: 105px; + height: 105px; +} +.Mount_Head_Unicorn-Shade { + background-image: url(spritesmith-main-10.png); + background-position: -318px -1240px; + width: 105px; + height: 105px; +} +.Mount_Head_Unicorn-Skeleton { + background-image: url(spritesmith-main-10.png); + background-position: -424px -1240px; + width: 105px; + height: 105px; +} +.Mount_Head_Unicorn-White { + background-image: url(spritesmith-main-10.png); + background-position: -530px -1240px; + width: 105px; + height: 105px; +} +.Mount_Head_Unicorn-Zombie { + background-image: url(spritesmith-main-10.png); + background-position: -636px -1240px; + width: 105px; + height: 105px; +} +.Mount_Head_Whale-Base { + background-image: url(spritesmith-main-10.png); + background-position: -742px -1240px; + width: 105px; + height: 105px; +} +.Mount_Head_Whale-CottonCandyBlue { + background-image: url(spritesmith-main-10.png); + background-position: -408px -680px; + width: 105px; + height: 105px; +} +.Mount_Head_Whale-CottonCandyPink { + background-image: url(spritesmith-main-10.png); + background-position: -954px -1240px; + width: 105px; + height: 105px; +} +.Mount_Head_Whale-Desert { + background-image: url(spritesmith-main-10.png); + background-position: -1060px -1240px; + width: 105px; + height: 105px; +} +.Mount_Head_Whale-Golden { + background-image: url(spritesmith-main-10.png); + background-position: -1166px -1240px; + width: 105px; + height: 105px; +} +.Mount_Head_Whale-Red { + background-image: url(spritesmith-main-10.png); + background-position: -1346px 0px; + width: 105px; + height: 105px; +} +.Mount_Head_Whale-Shade { + background-image: url(spritesmith-main-10.png); + background-position: -1346px -106px; + width: 105px; + height: 105px; +} +.Mount_Head_Whale-Skeleton { + background-image: url(spritesmith-main-10.png); + background-position: -1346px -212px; + width: 105px; + height: 105px; +} +.Mount_Head_Whale-White { + background-image: url(spritesmith-main-10.png); + background-position: -1346px -318px; + width: 105px; + height: 105px; +} +.Mount_Head_Whale-Zombie { + background-image: url(spritesmith-main-10.png); + background-position: -1346px -424px; + width: 105px; + height: 105px; +} +.Mount_Head_Wolf-Base { + background-image: url(spritesmith-main-10.png); + background-position: -136px -544px; + width: 135px; + height: 135px; +} +.Mount_Head_Wolf-CottonCandyBlue { + background-image: url(spritesmith-main-10.png); + background-position: -272px -544px; + width: 135px; + height: 135px; +} +.Mount_Head_Wolf-CottonCandyPink { + background-image: url(spritesmith-main-10.png); + background-position: -408px -544px; + width: 135px; + height: 135px; +} +.Mount_Head_Wolf-Desert { + background-image: url(spritesmith-main-10.png); + background-position: -544px -544px; + width: 135px; + height: 135px; +} +.Mount_Head_Wolf-Floral { + background-image: url(spritesmith-main-10.png); + background-position: -680px 0px; + width: 135px; + height: 135px; +} +.Mount_Head_Wolf-Golden { + background-image: url(spritesmith-main-10.png); + background-position: -680px -136px; + width: 135px; + height: 135px; +} +.Mount_Head_Wolf-Peppermint { + background-image: url(spritesmith-main-10.png); + background-position: -680px -272px; + width: 135px; + height: 135px; +} +.Mount_Head_Wolf-Red { + background-image: url(spritesmith-main-10.png); + background-position: -680px -408px; + width: 135px; + height: 135px; +} +.Mount_Head_Wolf-Shade { + background-image: url(spritesmith-main-10.png); + background-position: -680px -544px; + width: 135px; + height: 135px; +} +.Mount_Head_Wolf-Skeleton { + background-image: url(spritesmith-main-10.png); + background-position: 0px -680px; + width: 135px; + height: 135px; +} +.Mount_Head_Wolf-Spooky { + background-image: url(spritesmith-main-10.png); + background-position: -136px -680px; + width: 135px; + height: 135px; +} +.Mount_Head_Wolf-White { + background-image: url(spritesmith-main-10.png); + background-position: -272px -680px; + width: 135px; + height: 135px; +} +.Mount_Head_Wolf-Zombie { + background-image: url(spritesmith-main-10.png); + background-position: -136px 0px; + width: 135px; + height: 135px; +} +.Mount_Icon_Axolotl-Base { + background-image: url(spritesmith-main-10.png); + background-position: -636px -1346px; width: 81px; height: 99px; } .Mount_Icon_Axolotl-CottonCandyBlue { background-image: url(spritesmith-main-10.png); - background-position: 0px -1316px; + background-position: -1148px -1452px; width: 81px; height: 99px; } .Mount_Icon_Axolotl-CottonCandyPink { background-image: url(spritesmith-main-10.png); - background-position: -82px -1616px; + background-position: -718px -1346px; width: 81px; height: 99px; } .Mount_Icon_Axolotl-Desert { background-image: url(spritesmith-main-10.png); - background-position: -164px -1316px; + background-position: -800px -1346px; width: 81px; height: 99px; } .Mount_Icon_Axolotl-Golden { background-image: url(spritesmith-main-10.png); - background-position: -246px -1316px; + background-position: -882px -1346px; width: 81px; height: 99px; } .Mount_Icon_Axolotl-Red { background-image: url(spritesmith-main-10.png); - background-position: -328px -1316px; + background-position: -964px -1346px; width: 81px; height: 99px; } .Mount_Icon_Axolotl-Shade { background-image: url(spritesmith-main-10.png); - background-position: -410px -1316px; + background-position: -1046px -1346px; width: 81px; height: 99px; } .Mount_Icon_Axolotl-Skeleton { background-image: url(spritesmith-main-10.png); - background-position: -492px -1316px; + background-position: -1128px -1346px; width: 81px; height: 99px; } .Mount_Icon_Axolotl-White { background-image: url(spritesmith-main-10.png); - background-position: -574px -1316px; + background-position: -1210px -1346px; width: 81px; height: 99px; } .Mount_Icon_Axolotl-Zombie { background-image: url(spritesmith-main-10.png); - background-position: -656px -1316px; + background-position: -1292px -1346px; width: 81px; height: 99px; } .Mount_Icon_BearCub-Base { background-image: url(spritesmith-main-10.png); - background-position: -738px -1316px; + background-position: -1452px 0px; width: 81px; height: 99px; } .Mount_Icon_BearCub-CottonCandyBlue { background-image: url(spritesmith-main-10.png); - background-position: -820px -1316px; + background-position: -1452px -100px; width: 81px; height: 99px; } .Mount_Icon_BearCub-CottonCandyPink { background-image: url(spritesmith-main-10.png); - background-position: -902px -1316px; + background-position: -1452px -200px; width: 81px; height: 99px; } .Mount_Icon_BearCub-Desert { background-image: url(spritesmith-main-10.png); - background-position: -984px -1316px; + background-position: -1452px -300px; width: 81px; height: 99px; } .Mount_Icon_BearCub-Floral { background-image: url(spritesmith-main-10.png); - background-position: -1066px -1316px; + background-position: -1452px -400px; width: 81px; height: 99px; } .Mount_Icon_BearCub-Golden { background-image: url(spritesmith-main-10.png); - background-position: -1148px -1316px; + background-position: -1452px -500px; width: 81px; height: 99px; } .Mount_Icon_BearCub-Peppermint { background-image: url(spritesmith-main-10.png); - background-position: -1230px -1316px; + background-position: -1452px -600px; width: 81px; height: 99px; } .Mount_Icon_BearCub-Polar { background-image: url(spritesmith-main-10.png); - background-position: -1312px -1316px; + background-position: -1452px -700px; width: 81px; height: 99px; } .Mount_Icon_BearCub-Red { background-image: url(spritesmith-main-10.png); - background-position: -1452px 0px; + background-position: -1452px -800px; width: 81px; height: 99px; } .Mount_Icon_BearCub-Shade { background-image: url(spritesmith-main-10.png); - background-position: -1452px -100px; + background-position: -1452px -900px; width: 81px; height: 99px; } .Mount_Icon_BearCub-Skeleton { background-image: url(spritesmith-main-10.png); - background-position: -1452px -200px; + background-position: -1452px -1000px; width: 81px; height: 99px; } .Mount_Icon_BearCub-Spooky { background-image: url(spritesmith-main-10.png); - background-position: -1452px -300px; + background-position: -1452px -1100px; width: 81px; height: 99px; } .Mount_Icon_BearCub-White { background-image: url(spritesmith-main-10.png); - background-position: -1452px -400px; + background-position: -1452px -1200px; width: 81px; height: 99px; } .Mount_Icon_BearCub-Zombie { background-image: url(spritesmith-main-10.png); - background-position: -1452px -500px; + background-position: -1452px -1300px; width: 81px; height: 99px; } .Mount_Icon_Bunny-Base { background-image: url(spritesmith-main-10.png); - background-position: -1452px -600px; + background-position: -1534px 0px; width: 81px; height: 99px; } .Mount_Icon_Bunny-CottonCandyBlue { background-image: url(spritesmith-main-10.png); - background-position: -1452px -700px; + background-position: -1534px -100px; width: 81px; height: 99px; } .Mount_Icon_Bunny-CottonCandyPink { background-image: url(spritesmith-main-10.png); - background-position: -1452px -800px; + background-position: -1534px -200px; width: 81px; height: 99px; } .Mount_Icon_Bunny-Desert { background-image: url(spritesmith-main-10.png); - background-position: -1452px -900px; + background-position: -1534px -300px; width: 81px; height: 99px; } .Mount_Icon_Bunny-Golden { background-image: url(spritesmith-main-10.png); - background-position: -1452px -1000px; + background-position: -1534px -400px; width: 81px; height: 99px; } .Mount_Icon_Bunny-Red { background-image: url(spritesmith-main-10.png); - background-position: -1452px -1100px; + background-position: -1534px -500px; width: 81px; height: 99px; } .Mount_Icon_Bunny-Shade { background-image: url(spritesmith-main-10.png); - background-position: -1452px -1200px; + background-position: -1534px -600px; width: 81px; height: 99px; } .Mount_Icon_Bunny-Skeleton { background-image: url(spritesmith-main-10.png); - background-position: -1452px -1300px; + background-position: -1534px -700px; width: 81px; height: 99px; } .Mount_Icon_Bunny-White { background-image: url(spritesmith-main-10.png); - background-position: 0px -1416px; + background-position: -1534px -800px; width: 81px; height: 99px; } .Mount_Icon_Bunny-Zombie { background-image: url(spritesmith-main-10.png); - background-position: -82px -1416px; + background-position: -1534px -900px; width: 81px; height: 99px; } .Mount_Icon_Cactus-Base { background-image: url(spritesmith-main-10.png); - background-position: -164px -1416px; + background-position: -1534px -1000px; width: 81px; height: 99px; } .Mount_Icon_Cactus-CottonCandyBlue { background-image: url(spritesmith-main-10.png); - background-position: -246px -1416px; + background-position: -1534px -1100px; width: 81px; height: 99px; } .Mount_Icon_Cactus-CottonCandyPink { background-image: url(spritesmith-main-10.png); - background-position: -328px -1416px; + background-position: -1534px -1200px; width: 81px; height: 99px; } .Mount_Icon_Cactus-Desert { background-image: url(spritesmith-main-10.png); - background-position: -410px -1416px; + background-position: -1534px -1300px; width: 81px; height: 99px; } .Mount_Icon_Cactus-Floral { background-image: url(spritesmith-main-10.png); - background-position: -492px -1416px; + background-position: 0px -1452px; width: 81px; height: 99px; } .Mount_Icon_Cactus-Golden { background-image: url(spritesmith-main-10.png); - background-position: -574px -1416px; + background-position: -82px -1452px; width: 81px; height: 99px; } .Mount_Icon_Cactus-Peppermint { background-image: url(spritesmith-main-10.png); - background-position: -656px -1416px; + background-position: -164px -1452px; width: 81px; height: 99px; } .Mount_Icon_Cactus-Red { background-image: url(spritesmith-main-10.png); - background-position: -738px -1416px; + background-position: -246px -1452px; width: 81px; height: 99px; } .Mount_Icon_Cactus-Shade { background-image: url(spritesmith-main-10.png); - background-position: -820px -1416px; + background-position: -328px -1452px; width: 81px; height: 99px; } .Mount_Icon_Cactus-Skeleton { background-image: url(spritesmith-main-10.png); - background-position: -902px -1416px; + background-position: -410px -1452px; width: 81px; height: 99px; } .Mount_Icon_Cactus-Spooky { background-image: url(spritesmith-main-10.png); - background-position: -984px -1416px; + background-position: -492px -1452px; width: 81px; height: 99px; } .Mount_Icon_Cactus-White { background-image: url(spritesmith-main-10.png); - background-position: -1066px -1416px; + background-position: -574px -1452px; width: 81px; height: 99px; } .Mount_Icon_Cactus-Zombie { background-image: url(spritesmith-main-10.png); - background-position: -1148px -1416px; + background-position: -656px -1452px; width: 81px; height: 99px; } .Mount_Icon_Cheetah-Base { background-image: url(spritesmith-main-10.png); - background-position: -1230px -1416px; + background-position: -738px -1452px; width: 81px; height: 99px; } .Mount_Icon_Cheetah-CottonCandyBlue { background-image: url(spritesmith-main-10.png); - background-position: -1312px -1416px; + background-position: -820px -1452px; width: 81px; height: 99px; } .Mount_Icon_Cheetah-CottonCandyPink { background-image: url(spritesmith-main-10.png); - background-position: -1394px -1416px; + background-position: -902px -1452px; width: 81px; height: 99px; } .Mount_Icon_Cheetah-Desert { background-image: url(spritesmith-main-10.png); - background-position: -1534px 0px; + background-position: -984px -1452px; width: 81px; height: 99px; } .Mount_Icon_Cheetah-Golden { background-image: url(spritesmith-main-10.png); - background-position: -1534px -100px; + background-position: -1066px -1452px; width: 81px; height: 99px; } .Mount_Icon_Cheetah-Red { background-image: url(spritesmith-main-10.png); - background-position: -1534px -200px; + background-position: -726px -680px; width: 81px; height: 99px; } .Mount_Icon_Cheetah-Shade { background-image: url(spritesmith-main-10.png); - background-position: -1534px -300px; + background-position: -1230px -1452px; width: 81px; height: 99px; } .Mount_Icon_Cheetah-Skeleton { background-image: url(spritesmith-main-10.png); - background-position: -1534px -400px; + background-position: -1312px -1452px; width: 81px; height: 99px; } .Mount_Icon_Cheetah-White { background-image: url(spritesmith-main-10.png); - background-position: -1534px -500px; + background-position: -1394px -1452px; width: 81px; height: 99px; } .Mount_Icon_Cheetah-Zombie { background-image: url(spritesmith-main-10.png); - background-position: -1534px -600px; + background-position: -1476px -1452px; width: 81px; height: 99px; } .Mount_Icon_Cuttlefish-Base { background-image: url(spritesmith-main-10.png); - background-position: -1534px -700px; + background-position: -1616px 0px; width: 81px; height: 99px; } .Mount_Icon_Cuttlefish-CottonCandyBlue { background-image: url(spritesmith-main-10.png); - background-position: -1534px -800px; + background-position: -1616px -100px; width: 81px; height: 99px; } .Mount_Icon_Cuttlefish-CottonCandyPink { background-image: url(spritesmith-main-10.png); - background-position: -1534px -900px; + background-position: -1616px -200px; width: 81px; height: 99px; } .Mount_Icon_Cuttlefish-Desert { background-image: url(spritesmith-main-10.png); - background-position: -1534px -1000px; + background-position: -1616px -300px; width: 81px; height: 99px; } .Mount_Icon_Cuttlefish-Golden { background-image: url(spritesmith-main-10.png); - background-position: -1534px -1100px; + background-position: -1616px -400px; width: 81px; height: 99px; } .Mount_Icon_Cuttlefish-Red { background-image: url(spritesmith-main-10.png); - background-position: -1534px -1200px; + background-position: -1616px -500px; width: 81px; height: 99px; } .Mount_Icon_Cuttlefish-Shade { background-image: url(spritesmith-main-10.png); - background-position: -1534px -1300px; + background-position: -1616px -600px; width: 81px; height: 99px; } .Mount_Icon_Cuttlefish-Skeleton { background-image: url(spritesmith-main-10.png); - background-position: -1534px -1400px; + background-position: -1616px -700px; width: 81px; height: 99px; } .Mount_Icon_Cuttlefish-White { background-image: url(spritesmith-main-10.png); - background-position: 0px -1516px; + background-position: -1616px -800px; width: 81px; height: 99px; } .Mount_Icon_Cuttlefish-Zombie { background-image: url(spritesmith-main-10.png); - background-position: -82px -1516px; + background-position: -1616px -900px; width: 81px; height: 99px; } .Mount_Icon_Deer-Base { background-image: url(spritesmith-main-10.png); - background-position: -164px -1516px; + background-position: -1616px -1000px; width: 81px; height: 99px; } .Mount_Icon_Deer-CottonCandyBlue { background-image: url(spritesmith-main-10.png); - background-position: -246px -1516px; + background-position: -1616px -1100px; width: 81px; height: 99px; } .Mount_Icon_Deer-CottonCandyPink { background-image: url(spritesmith-main-10.png); - background-position: -328px -1516px; + background-position: -1616px -1200px; width: 81px; height: 99px; } .Mount_Icon_Deer-Desert { background-image: url(spritesmith-main-10.png); - background-position: -410px -1516px; + background-position: -1616px -1300px; width: 81px; height: 99px; } .Mount_Icon_Deer-Golden { background-image: url(spritesmith-main-10.png); - background-position: -492px -1516px; + background-position: -1616px -1400px; width: 81px; height: 99px; } .Mount_Icon_Deer-Red { background-image: url(spritesmith-main-10.png); - background-position: -574px -1516px; + background-position: 0px -1552px; width: 81px; height: 99px; } .Mount_Icon_Deer-Shade { background-image: url(spritesmith-main-10.png); - background-position: -656px -1516px; + background-position: -82px -1552px; width: 81px; height: 99px; } .Mount_Icon_Deer-Skeleton { background-image: url(spritesmith-main-10.png); - background-position: -738px -1516px; + background-position: -164px -1552px; width: 81px; height: 99px; } .Mount_Icon_Deer-White { background-image: url(spritesmith-main-10.png); - background-position: -820px -1516px; + background-position: -246px -1552px; width: 81px; height: 99px; } .Mount_Icon_Deer-Zombie { background-image: url(spritesmith-main-10.png); - background-position: -902px -1516px; + background-position: -328px -1552px; width: 81px; height: 99px; } .Mount_Icon_Dragon-Base { background-image: url(spritesmith-main-10.png); - background-position: -984px -1516px; + background-position: -410px -1552px; width: 81px; height: 99px; } .Mount_Icon_Dragon-CottonCandyBlue { background-image: url(spritesmith-main-10.png); - background-position: -1066px -1516px; + background-position: -492px -1552px; width: 81px; height: 99px; } .Mount_Icon_Dragon-CottonCandyPink { background-image: url(spritesmith-main-10.png); - background-position: -1148px -1516px; + background-position: -574px -1552px; width: 81px; height: 99px; } .Mount_Icon_Dragon-Desert { background-image: url(spritesmith-main-10.png); - background-position: -1230px -1516px; + background-position: -656px -1552px; width: 81px; height: 99px; } .Mount_Icon_Dragon-Floral { background-image: url(spritesmith-main-10.png); - background-position: -1312px -1516px; + background-position: -738px -1552px; width: 81px; height: 99px; } .Mount_Icon_Dragon-Golden { background-image: url(spritesmith-main-10.png); - background-position: -1394px -1516px; + background-position: -820px -1552px; width: 81px; height: 99px; } .Mount_Icon_Dragon-Peppermint { background-image: url(spritesmith-main-10.png); - background-position: -1476px -1516px; + background-position: -902px -1552px; width: 81px; height: 99px; } .Mount_Icon_Dragon-Red { background-image: url(spritesmith-main-10.png); - background-position: -1616px 0px; + background-position: -984px -1552px; width: 81px; height: 99px; } .Mount_Icon_Dragon-Shade { background-image: url(spritesmith-main-10.png); - background-position: -1616px -100px; + background-position: -1066px -1552px; width: 81px; height: 99px; } .Mount_Icon_Dragon-Skeleton { background-image: url(spritesmith-main-10.png); - background-position: -1616px -200px; + background-position: -1148px -1552px; width: 81px; height: 99px; } .Mount_Icon_Dragon-Spooky { background-image: url(spritesmith-main-10.png); - background-position: -1616px -300px; + background-position: -1230px -1552px; width: 81px; height: 99px; } .Mount_Icon_Dragon-White { background-image: url(spritesmith-main-10.png); - background-position: -1616px -400px; + background-position: -1312px -1552px; width: 81px; height: 99px; } .Mount_Icon_Dragon-Zombie { background-image: url(spritesmith-main-10.png); - background-position: -1616px -500px; + background-position: -1394px -1552px; width: 81px; height: 99px; } .Mount_Icon_Egg-Base { background-image: url(spritesmith-main-10.png); - background-position: -1616px -600px; + background-position: -1476px -1552px; width: 81px; height: 99px; } .Mount_Icon_Egg-CottonCandyBlue { background-image: url(spritesmith-main-10.png); - background-position: -1616px -700px; + background-position: -1558px -1552px; width: 81px; height: 99px; } .Mount_Icon_Egg-CottonCandyPink { background-image: url(spritesmith-main-10.png); - background-position: -1616px -800px; + background-position: -1698px 0px; width: 81px; height: 99px; } .Mount_Icon_Egg-Desert { background-image: url(spritesmith-main-10.png); - background-position: -1616px -900px; + background-position: -1698px -100px; width: 81px; height: 99px; } .Mount_Icon_Egg-Golden { background-image: url(spritesmith-main-10.png); - background-position: -1616px -1000px; + background-position: -1698px -200px; width: 81px; height: 99px; } .Mount_Icon_Egg-Red { background-image: url(spritesmith-main-10.png); - background-position: -1616px -1100px; + background-position: -1698px -300px; width: 81px; height: 99px; } .Mount_Icon_Egg-Shade { background-image: url(spritesmith-main-10.png); - background-position: -1616px -1200px; + background-position: -1698px -400px; width: 81px; height: 99px; } .Mount_Icon_Egg-Skeleton { background-image: url(spritesmith-main-10.png); - background-position: -1616px -1300px; + background-position: -1698px -500px; width: 81px; height: 99px; } .Mount_Icon_Egg-White { background-image: url(spritesmith-main-10.png); - background-position: -1616px -1400px; + background-position: -1698px -600px; width: 81px; height: 99px; } .Mount_Icon_Egg-Zombie { background-image: url(spritesmith-main-10.png); - background-position: -1616px -1500px; + background-position: -1698px -700px; width: 81px; height: 99px; } .Mount_Icon_Falcon-Base { background-image: url(spritesmith-main-10.png); - background-position: -1698px 0px; + background-position: -1698px -800px; width: 81px; height: 99px; } .Mount_Icon_Falcon-CottonCandyBlue { background-image: url(spritesmith-main-10.png); - background-position: -1698px -100px; + background-position: -1698px -900px; width: 81px; height: 99px; } .Mount_Icon_Falcon-CottonCandyPink { background-image: url(spritesmith-main-10.png); - background-position: -1698px -200px; + background-position: -1698px -1000px; width: 81px; height: 99px; } .Mount_Icon_Falcon-Desert { background-image: url(spritesmith-main-10.png); - background-position: -1698px -300px; + background-position: -1698px -1100px; width: 81px; height: 99px; } .Mount_Icon_Falcon-Golden { - background-image: url(spritesmith-main-10.png); - background-position: -1698px -400px; - width: 81px; - height: 99px; -} -.Mount_Icon_Falcon-Red { - background-image: url(spritesmith-main-10.png); - background-position: -1698px -500px; - width: 81px; - height: 99px; -} -.Mount_Icon_Falcon-Shade { - background-image: url(spritesmith-main-10.png); - background-position: -1698px -600px; - width: 81px; - height: 99px; -} -.Mount_Icon_Falcon-Skeleton { - background-image: url(spritesmith-main-10.png); - background-position: -1698px -700px; - width: 81px; - height: 99px; -} -.Mount_Icon_Falcon-White { - background-image: url(spritesmith-main-10.png); - background-position: -1698px -800px; - width: 81px; - height: 99px; -} -.Mount_Icon_Falcon-Zombie { - background-image: url(spritesmith-main-10.png); - background-position: -1698px -900px; - width: 81px; - height: 99px; -} -.Mount_Icon_FlyingPig-Base { - background-image: url(spritesmith-main-10.png); - background-position: -1698px -1000px; - width: 81px; - height: 99px; -} -.Mount_Icon_FlyingPig-CottonCandyBlue { - background-image: url(spritesmith-main-10.png); - background-position: -1698px -1100px; - width: 81px; - height: 99px; -} -.Mount_Icon_FlyingPig-CottonCandyPink { background-image: url(spritesmith-main-10.png); background-position: -1698px -1200px; width: 81px; height: 99px; } -.Mount_Icon_FlyingPig-Desert { - background-image: url(spritesmith-main-10.png); - background-position: -1698px -1300px; - width: 81px; - height: 99px; -} -.Mount_Icon_FlyingPig-Floral { - background-image: url(spritesmith-main-10.png); - background-position: -1698px -1400px; - width: 81px; - height: 99px; -} -.Mount_Icon_FlyingPig-Golden { - background-image: url(spritesmith-main-10.png); - background-position: -1698px -1500px; - width: 81px; - height: 99px; -} -.Mount_Icon_FlyingPig-Peppermint { - background-image: url(spritesmith-main-10.png); - background-position: 0px -1616px; - width: 81px; - height: 99px; -} -.Mount_Icon_FlyingPig-Red { - background-image: url(spritesmith-main-10.png); - background-position: -82px -1316px; - width: 81px; - height: 99px; -} diff --git a/common/dist/sprites/spritesmith-main-10.png b/common/dist/sprites/spritesmith-main-10.png index f2ff4ceff4..c2a72cae67 100644 Binary files a/common/dist/sprites/spritesmith-main-10.png and b/common/dist/sprites/spritesmith-main-10.png differ diff --git a/common/dist/sprites/spritesmith-main-11.css b/common/dist/sprites/spritesmith-main-11.css index dd947f867a..b976e22abc 100644 --- a/common/dist/sprites/spritesmith-main-11.css +++ b/common/dist/sprites/spritesmith-main-11.css @@ -1,1659 +1,1737 @@ -.Mount_Icon_FlyingPig-Shade { +.Mount_Icon_Falcon-Red { background-image: url(spritesmith-main-11.png); - background-position: -1066px -1418px; + background-position: -1572px -700px; width: 81px; height: 99px; } -.Mount_Icon_FlyingPig-Skeleton { +.Mount_Icon_Falcon-Shade { background-image: url(spritesmith-main-11.png); background-position: -164px -1118px; width: 81px; height: 99px; } -.Mount_Icon_FlyingPig-Spooky { +.Mount_Icon_Falcon-Skeleton { background-image: url(spritesmith-main-11.png); - background-position: -1148px -1418px; + background-position: -1572px -800px; width: 81px; height: 99px; } -.Mount_Icon_FlyingPig-White { +.Mount_Icon_Falcon-White { background-image: url(spritesmith-main-11.png); - background-position: -1230px -1418px; + background-position: -1572px -900px; width: 81px; height: 99px; } -.Mount_Icon_FlyingPig-Zombie { +.Mount_Icon_Falcon-Zombie { background-image: url(spritesmith-main-11.png); - background-position: -1312px -1418px; + background-position: -1572px -1000px; width: 81px; height: 99px; } -.Mount_Icon_Fox-Base { +.Mount_Icon_FlyingPig-Base { background-image: url(spritesmith-main-11.png); - background-position: -1394px -1418px; + background-position: -1572px -1100px; width: 81px; height: 99px; } -.Mount_Icon_Fox-CottonCandyBlue { +.Mount_Icon_FlyingPig-CottonCandyBlue { background-image: url(spritesmith-main-11.png); - background-position: -1476px -1418px; + background-position: -1572px -1200px; width: 81px; height: 99px; } -.Mount_Icon_Fox-CottonCandyPink { +.Mount_Icon_FlyingPig-CottonCandyPink { background-image: url(spritesmith-main-11.png); - background-position: -1572px 0px; + background-position: -1572px -1300px; width: 81px; height: 99px; } -.Mount_Icon_Fox-Desert { +.Mount_Icon_FlyingPig-Desert { background-image: url(spritesmith-main-11.png); - background-position: -1572px -100px; + background-position: -1572px -1400px; width: 81px; height: 99px; } -.Mount_Icon_Fox-Floral { +.Mount_Icon_FlyingPig-Floral { background-image: url(spritesmith-main-11.png); - background-position: -1572px -200px; + background-position: 0px -1518px; width: 81px; height: 99px; } -.Mount_Icon_Fox-Golden { +.Mount_Icon_FlyingPig-Golden { background-image: url(spritesmith-main-11.png); - background-position: -1572px -300px; + background-position: -82px -1518px; width: 81px; height: 99px; } -.Mount_Icon_Fox-Peppermint { +.Mount_Icon_FlyingPig-Peppermint { background-image: url(spritesmith-main-11.png); background-position: -318px -206px; width: 81px; height: 99px; } -.Mount_Icon_Fox-Red { +.Mount_Icon_FlyingPig-Red { background-image: url(spritesmith-main-11.png); background-position: 0px -318px; width: 81px; height: 99px; } -.Mount_Icon_Fox-Shade { +.Mount_Icon_FlyingPig-Shade { background-image: url(spritesmith-main-11.png); background-position: -82px -318px; width: 81px; height: 99px; } -.Mount_Icon_Fox-Skeleton { +.Mount_Icon_FlyingPig-Skeleton { background-image: url(spritesmith-main-11.png); background-position: -164px -318px; width: 81px; height: 99px; } -.Mount_Icon_Fox-Spooky { +.Mount_Icon_FlyingPig-Spooky { background-image: url(spritesmith-main-11.png); background-position: -246px -318px; width: 81px; height: 99px; } -.Mount_Icon_Fox-White { +.Mount_Icon_FlyingPig-White { background-image: url(spritesmith-main-11.png); background-position: -328px -318px; width: 81px; height: 99px; } -.Mount_Icon_Fox-Zombie { +.Mount_Icon_FlyingPig-Zombie { background-image: url(spritesmith-main-11.png); background-position: -424px 0px; width: 81px; height: 99px; } -.Mount_Icon_Frog-Base { +.Mount_Icon_Fox-Base { background-image: url(spritesmith-main-11.png); background-position: -424px -100px; width: 81px; height: 99px; } -.Mount_Icon_Frog-CottonCandyBlue { +.Mount_Icon_Fox-CottonCandyBlue { background-image: url(spritesmith-main-11.png); background-position: -424px -200px; width: 81px; height: 99px; } -.Mount_Icon_Frog-CottonCandyPink { +.Mount_Icon_Fox-CottonCandyPink { background-image: url(spritesmith-main-11.png); background-position: -424px -300px; width: 81px; height: 99px; } -.Mount_Icon_Frog-Desert { +.Mount_Icon_Fox-Desert { background-image: url(spritesmith-main-11.png); background-position: -506px 0px; width: 81px; height: 99px; } -.Mount_Icon_Frog-Golden { +.Mount_Icon_Fox-Floral { background-image: url(spritesmith-main-11.png); background-position: -506px -100px; width: 81px; height: 99px; } -.Mount_Icon_Frog-Red { +.Mount_Icon_Fox-Golden { background-image: url(spritesmith-main-11.png); background-position: -506px -200px; width: 81px; height: 99px; } -.Mount_Icon_Frog-Shade { +.Mount_Icon_Fox-Peppermint { background-image: url(spritesmith-main-11.png); background-position: -506px -300px; width: 81px; height: 99px; } -.Mount_Icon_Frog-Skeleton { +.Mount_Icon_Fox-Red { background-image: url(spritesmith-main-11.png); background-position: 0px -418px; width: 81px; height: 99px; } -.Mount_Icon_Frog-White { +.Mount_Icon_Fox-Shade { background-image: url(spritesmith-main-11.png); background-position: -82px -418px; width: 81px; height: 99px; } -.Mount_Icon_Frog-Zombie { +.Mount_Icon_Fox-Skeleton { background-image: url(spritesmith-main-11.png); background-position: -164px -418px; width: 81px; height: 99px; } -.Mount_Icon_Gryphon-Base { +.Mount_Icon_Fox-Spooky { background-image: url(spritesmith-main-11.png); background-position: -246px -418px; width: 81px; height: 99px; } -.Mount_Icon_Gryphon-CottonCandyBlue { +.Mount_Icon_Fox-White { background-image: url(spritesmith-main-11.png); background-position: -328px -418px; width: 81px; height: 99px; } -.Mount_Icon_Gryphon-CottonCandyPink { +.Mount_Icon_Fox-Zombie { background-image: url(spritesmith-main-11.png); background-position: -410px -418px; width: 81px; height: 99px; } -.Mount_Icon_Gryphon-Desert { +.Mount_Icon_Frog-Base { background-image: url(spritesmith-main-11.png); background-position: -492px -418px; width: 81px; height: 99px; } -.Mount_Icon_Gryphon-Golden { +.Mount_Icon_Frog-CottonCandyBlue { background-image: url(spritesmith-main-11.png); background-position: -588px 0px; width: 81px; height: 99px; } -.Mount_Icon_Gryphon-Red { +.Mount_Icon_Frog-CottonCandyPink { background-image: url(spritesmith-main-11.png); background-position: -588px -100px; width: 81px; height: 99px; } -.Mount_Icon_Gryphon-RoyalPurple { +.Mount_Icon_Frog-Desert { background-image: url(spritesmith-main-11.png); background-position: -588px -200px; width: 81px; height: 99px; } -.Mount_Icon_Gryphon-Shade { +.Mount_Icon_Frog-Golden { background-image: url(spritesmith-main-11.png); background-position: -588px -300px; width: 81px; height: 99px; } -.Mount_Icon_Gryphon-Skeleton { +.Mount_Icon_Frog-Red { background-image: url(spritesmith-main-11.png); background-position: -588px -400px; width: 81px; height: 99px; } -.Mount_Icon_Gryphon-White { +.Mount_Icon_Frog-Shade { background-image: url(spritesmith-main-11.png); background-position: 0px -518px; width: 81px; height: 99px; } -.Mount_Icon_Gryphon-Zombie { +.Mount_Icon_Frog-Skeleton { background-image: url(spritesmith-main-11.png); background-position: -82px -518px; width: 81px; height: 99px; } -.Mount_Icon_Hedgehog-Base { +.Mount_Icon_Frog-White { background-image: url(spritesmith-main-11.png); background-position: -164px -518px; width: 81px; height: 99px; } -.Mount_Icon_Hedgehog-CottonCandyBlue { +.Mount_Icon_Frog-Zombie { background-image: url(spritesmith-main-11.png); background-position: -246px -518px; width: 81px; height: 99px; } -.Mount_Icon_Hedgehog-CottonCandyPink { +.Mount_Icon_Gryphon-Base { background-image: url(spritesmith-main-11.png); background-position: -328px -518px; width: 81px; height: 99px; } -.Mount_Icon_Hedgehog-Desert { +.Mount_Icon_Gryphon-CottonCandyBlue { background-image: url(spritesmith-main-11.png); background-position: -410px -518px; width: 81px; height: 99px; } -.Mount_Icon_Hedgehog-Golden { +.Mount_Icon_Gryphon-CottonCandyPink { background-image: url(spritesmith-main-11.png); background-position: -492px -518px; width: 81px; height: 99px; } -.Mount_Icon_Hedgehog-Red { +.Mount_Icon_Gryphon-Desert { background-image: url(spritesmith-main-11.png); background-position: -574px -518px; width: 81px; height: 99px; } -.Mount_Icon_Hedgehog-Shade { +.Mount_Icon_Gryphon-Golden { background-image: url(spritesmith-main-11.png); background-position: -670px 0px; width: 81px; height: 99px; } -.Mount_Icon_Hedgehog-Skeleton { +.Mount_Icon_Gryphon-Red { background-image: url(spritesmith-main-11.png); background-position: -670px -100px; width: 81px; height: 99px; } -.Mount_Icon_Hedgehog-White { +.Mount_Icon_Gryphon-RoyalPurple { background-image: url(spritesmith-main-11.png); background-position: -670px -200px; width: 81px; height: 99px; } -.Mount_Icon_Hedgehog-Zombie { +.Mount_Icon_Gryphon-Shade { background-image: url(spritesmith-main-11.png); background-position: -670px -300px; width: 81px; height: 99px; } -.Mount_Icon_Horse-Base { +.Mount_Icon_Gryphon-Skeleton { background-image: url(spritesmith-main-11.png); background-position: -670px -400px; width: 81px; height: 99px; } -.Mount_Icon_Horse-CottonCandyBlue { +.Mount_Icon_Gryphon-White { background-image: url(spritesmith-main-11.png); background-position: -670px -500px; width: 81px; height: 99px; } -.Mount_Icon_Horse-CottonCandyPink { +.Mount_Icon_Gryphon-Zombie { background-image: url(spritesmith-main-11.png); background-position: 0px -618px; width: 81px; height: 99px; } -.Mount_Icon_Horse-Desert { +.Mount_Icon_Hedgehog-Base { background-image: url(spritesmith-main-11.png); background-position: -82px -618px; width: 81px; height: 99px; } -.Mount_Icon_Horse-Golden { +.Mount_Icon_Hedgehog-CottonCandyBlue { background-image: url(spritesmith-main-11.png); background-position: -164px -618px; width: 81px; height: 99px; } -.Mount_Icon_Horse-Red { +.Mount_Icon_Hedgehog-CottonCandyPink { background-image: url(spritesmith-main-11.png); background-position: -246px -618px; width: 81px; height: 99px; } -.Mount_Icon_Horse-Shade { +.Mount_Icon_Hedgehog-Desert { background-image: url(spritesmith-main-11.png); background-position: -328px -618px; width: 81px; height: 99px; } -.Mount_Icon_Horse-Skeleton { +.Mount_Icon_Hedgehog-Golden { background-image: url(spritesmith-main-11.png); background-position: -410px -618px; width: 81px; height: 99px; } -.Mount_Icon_Horse-White { +.Mount_Icon_Hedgehog-Red { background-image: url(spritesmith-main-11.png); background-position: -492px -618px; width: 81px; height: 99px; } -.Mount_Icon_Horse-Zombie { +.Mount_Icon_Hedgehog-Shade { background-image: url(spritesmith-main-11.png); background-position: -574px -618px; width: 81px; height: 99px; } -.Mount_Icon_JackOLantern-Base { +.Mount_Icon_Hedgehog-Skeleton { background-image: url(spritesmith-main-11.png); background-position: -656px -618px; width: 81px; height: 99px; } -.Mount_Icon_LionCub-Base { +.Mount_Icon_Hedgehog-White { background-image: url(spritesmith-main-11.png); background-position: -752px 0px; width: 81px; height: 99px; } -.Mount_Icon_LionCub-CottonCandyBlue { +.Mount_Icon_Hedgehog-Zombie { background-image: url(spritesmith-main-11.png); background-position: -752px -100px; width: 81px; height: 99px; } -.Mount_Icon_LionCub-CottonCandyPink { +.Mount_Icon_Horse-Base { background-image: url(spritesmith-main-11.png); background-position: -752px -200px; width: 81px; height: 99px; } -.Mount_Icon_LionCub-Desert { +.Mount_Icon_Horse-CottonCandyBlue { background-image: url(spritesmith-main-11.png); background-position: -752px -300px; width: 81px; height: 99px; } -.Mount_Icon_LionCub-Ethereal { +.Mount_Icon_Horse-CottonCandyPink { background-image: url(spritesmith-main-11.png); background-position: -752px -400px; width: 81px; height: 99px; } -.Mount_Icon_LionCub-Floral { +.Mount_Icon_Horse-Desert { background-image: url(spritesmith-main-11.png); background-position: -752px -500px; width: 81px; height: 99px; } -.Mount_Icon_LionCub-Golden { +.Mount_Icon_Horse-Golden { background-image: url(spritesmith-main-11.png); background-position: -752px -600px; width: 81px; height: 99px; } -.Mount_Icon_LionCub-Peppermint { +.Mount_Icon_Horse-Red { background-image: url(spritesmith-main-11.png); background-position: 0px -718px; width: 81px; height: 99px; } -.Mount_Icon_LionCub-Red { +.Mount_Icon_Horse-Shade { background-image: url(spritesmith-main-11.png); background-position: -82px -718px; width: 81px; height: 99px; } -.Mount_Icon_LionCub-Shade { +.Mount_Icon_Horse-Skeleton { background-image: url(spritesmith-main-11.png); background-position: -164px -718px; width: 81px; height: 99px; } -.Mount_Icon_LionCub-Skeleton { +.Mount_Icon_Horse-White { background-image: url(spritesmith-main-11.png); background-position: -246px -718px; width: 81px; height: 99px; } -.Mount_Icon_LionCub-Spooky { +.Mount_Icon_Horse-Zombie { background-image: url(spritesmith-main-11.png); background-position: -328px -718px; width: 81px; height: 99px; } -.Mount_Icon_LionCub-White { +.Mount_Icon_JackOLantern-Base { background-image: url(spritesmith-main-11.png); background-position: -410px -718px; width: 81px; height: 99px; } -.Mount_Icon_LionCub-Zombie { +.Mount_Icon_LionCub-Base { background-image: url(spritesmith-main-11.png); background-position: -492px -718px; width: 81px; height: 99px; } -.Mount_Icon_MagicalBee-Base { +.Mount_Icon_LionCub-CottonCandyBlue { background-image: url(spritesmith-main-11.png); background-position: -574px -718px; width: 81px; height: 99px; } -.Mount_Icon_Mammoth-Base { +.Mount_Icon_LionCub-CottonCandyPink { background-image: url(spritesmith-main-11.png); background-position: -656px -718px; width: 81px; height: 99px; } -.Mount_Icon_MantisShrimp-Base { +.Mount_Icon_LionCub-Desert { background-image: url(spritesmith-main-11.png); background-position: -738px -718px; width: 81px; height: 99px; } -.Mount_Icon_Monkey-Base { +.Mount_Icon_LionCub-Ethereal { background-image: url(spritesmith-main-11.png); background-position: -834px 0px; width: 81px; height: 99px; } -.Mount_Icon_Monkey-CottonCandyBlue { +.Mount_Icon_LionCub-Floral { background-image: url(spritesmith-main-11.png); background-position: -834px -100px; width: 81px; height: 99px; } -.Mount_Icon_Monkey-CottonCandyPink { +.Mount_Icon_LionCub-Golden { background-image: url(spritesmith-main-11.png); background-position: -834px -200px; width: 81px; height: 99px; } -.Mount_Icon_Monkey-Desert { +.Mount_Icon_LionCub-Peppermint { background-image: url(spritesmith-main-11.png); background-position: -834px -300px; width: 81px; height: 99px; } -.Mount_Icon_Monkey-Golden { +.Mount_Icon_LionCub-Red { background-image: url(spritesmith-main-11.png); background-position: -834px -400px; width: 81px; height: 99px; } -.Mount_Icon_Monkey-Red { +.Mount_Icon_LionCub-Shade { background-image: url(spritesmith-main-11.png); background-position: -834px -500px; width: 81px; height: 99px; } -.Mount_Icon_Monkey-Shade { +.Mount_Icon_LionCub-Skeleton { background-image: url(spritesmith-main-11.png); background-position: -834px -600px; width: 81px; height: 99px; } -.Mount_Icon_Monkey-Skeleton { +.Mount_Icon_LionCub-Spooky { background-image: url(spritesmith-main-11.png); background-position: -834px -700px; width: 81px; height: 99px; } -.Mount_Icon_Monkey-White { +.Mount_Icon_LionCub-White { background-image: url(spritesmith-main-11.png); background-position: -916px 0px; width: 81px; height: 99px; } -.Mount_Icon_Monkey-Zombie { +.Mount_Icon_LionCub-Zombie { background-image: url(spritesmith-main-11.png); background-position: -916px -100px; width: 81px; height: 99px; } -.Mount_Icon_Octopus-Base { +.Mount_Icon_MagicalBee-Base { background-image: url(spritesmith-main-11.png); background-position: -916px -200px; width: 81px; height: 99px; } -.Mount_Icon_Octopus-CottonCandyBlue { +.Mount_Icon_Mammoth-Base { background-image: url(spritesmith-main-11.png); background-position: -916px -300px; width: 81px; height: 99px; } -.Mount_Icon_Octopus-CottonCandyPink { +.Mount_Icon_MantisShrimp-Base { background-image: url(spritesmith-main-11.png); background-position: -916px -400px; width: 81px; height: 99px; } -.Mount_Icon_Octopus-Desert { +.Mount_Icon_Monkey-Base { background-image: url(spritesmith-main-11.png); background-position: -916px -500px; width: 81px; height: 99px; } -.Mount_Icon_Octopus-Golden { +.Mount_Icon_Monkey-CottonCandyBlue { background-image: url(spritesmith-main-11.png); background-position: -916px -600px; width: 81px; height: 99px; } -.Mount_Icon_Octopus-Red { +.Mount_Icon_Monkey-CottonCandyPink { background-image: url(spritesmith-main-11.png); background-position: -916px -700px; width: 81px; height: 99px; } -.Mount_Icon_Octopus-Shade { +.Mount_Icon_Monkey-Desert { background-image: url(spritesmith-main-11.png); background-position: 0px -818px; width: 81px; height: 99px; } -.Mount_Icon_Octopus-Skeleton { +.Mount_Icon_Monkey-Golden { background-image: url(spritesmith-main-11.png); background-position: -82px -818px; width: 81px; height: 99px; } -.Mount_Icon_Octopus-White { +.Mount_Icon_Monkey-Red { background-image: url(spritesmith-main-11.png); background-position: -164px -818px; width: 81px; height: 99px; } -.Mount_Icon_Octopus-Zombie { +.Mount_Icon_Monkey-Shade { background-image: url(spritesmith-main-11.png); background-position: -246px -818px; width: 81px; height: 99px; } -.Mount_Icon_Orca-Base { +.Mount_Icon_Monkey-Skeleton { background-image: url(spritesmith-main-11.png); background-position: -328px -818px; width: 81px; height: 99px; } -.Mount_Icon_Owl-Base { +.Mount_Icon_Monkey-White { background-image: url(spritesmith-main-11.png); background-position: -410px -818px; width: 81px; height: 99px; } -.Mount_Icon_Owl-CottonCandyBlue { +.Mount_Icon_Monkey-Zombie { background-image: url(spritesmith-main-11.png); background-position: -492px -818px; width: 81px; height: 99px; } -.Mount_Icon_Owl-CottonCandyPink { +.Mount_Icon_Octopus-Base { background-image: url(spritesmith-main-11.png); background-position: -574px -818px; width: 81px; height: 99px; } -.Mount_Icon_Owl-Desert { +.Mount_Icon_Octopus-CottonCandyBlue { background-image: url(spritesmith-main-11.png); background-position: -656px -818px; width: 81px; height: 99px; } -.Mount_Icon_Owl-Golden { +.Mount_Icon_Octopus-CottonCandyPink { background-image: url(spritesmith-main-11.png); background-position: -738px -818px; width: 81px; height: 99px; } -.Mount_Icon_Owl-Red { +.Mount_Icon_Octopus-Desert { background-image: url(spritesmith-main-11.png); background-position: -820px -818px; width: 81px; height: 99px; } -.Mount_Icon_Owl-Shade { +.Mount_Icon_Octopus-Golden { background-image: url(spritesmith-main-11.png); background-position: -902px -818px; width: 81px; height: 99px; } -.Mount_Icon_Owl-Skeleton { +.Mount_Icon_Octopus-Red { background-image: url(spritesmith-main-11.png); background-position: -998px 0px; width: 81px; height: 99px; } -.Mount_Icon_Owl-White { +.Mount_Icon_Octopus-Shade { background-image: url(spritesmith-main-11.png); background-position: -998px -100px; width: 81px; height: 99px; } -.Mount_Icon_Owl-Zombie { +.Mount_Icon_Octopus-Skeleton { background-image: url(spritesmith-main-11.png); background-position: -998px -200px; width: 81px; height: 99px; } -.Mount_Icon_PandaCub-Base { +.Mount_Icon_Octopus-White { background-image: url(spritesmith-main-11.png); background-position: -998px -300px; width: 81px; height: 99px; } -.Mount_Icon_PandaCub-CottonCandyBlue { +.Mount_Icon_Octopus-Zombie { background-image: url(spritesmith-main-11.png); background-position: -998px -400px; width: 81px; height: 99px; } -.Mount_Icon_PandaCub-CottonCandyPink { +.Mount_Icon_Orca-Base { background-image: url(spritesmith-main-11.png); background-position: -998px -500px; width: 81px; height: 99px; } -.Mount_Icon_PandaCub-Desert { +.Mount_Icon_Owl-Base { background-image: url(spritesmith-main-11.png); background-position: -998px -600px; width: 81px; height: 99px; } -.Mount_Icon_PandaCub-Floral { +.Mount_Icon_Owl-CottonCandyBlue { background-image: url(spritesmith-main-11.png); background-position: -998px -700px; width: 81px; height: 99px; } -.Mount_Icon_PandaCub-Golden { +.Mount_Icon_Owl-CottonCandyPink { background-image: url(spritesmith-main-11.png); background-position: -998px -800px; width: 81px; height: 99px; } -.Mount_Icon_PandaCub-Peppermint { +.Mount_Icon_Owl-Desert { background-image: url(spritesmith-main-11.png); background-position: 0px -918px; width: 81px; height: 99px; } -.Mount_Icon_PandaCub-Red { +.Mount_Icon_Owl-Golden { background-image: url(spritesmith-main-11.png); background-position: -82px -918px; width: 81px; height: 99px; } -.Mount_Icon_PandaCub-Shade { +.Mount_Icon_Owl-Red { background-image: url(spritesmith-main-11.png); background-position: -164px -918px; width: 81px; height: 99px; } -.Mount_Icon_PandaCub-Skeleton { +.Mount_Icon_Owl-Shade { background-image: url(spritesmith-main-11.png); background-position: -246px -918px; width: 81px; height: 99px; } -.Mount_Icon_PandaCub-Spooky { +.Mount_Icon_Owl-Skeleton { background-image: url(spritesmith-main-11.png); background-position: -328px -918px; width: 81px; height: 99px; } -.Mount_Icon_PandaCub-White { +.Mount_Icon_Owl-White { background-image: url(spritesmith-main-11.png); background-position: -410px -918px; width: 81px; height: 99px; } -.Mount_Icon_PandaCub-Zombie { +.Mount_Icon_Owl-Zombie { background-image: url(spritesmith-main-11.png); background-position: -492px -918px; width: 81px; height: 99px; } -.Mount_Icon_Parrot-Base { +.Mount_Icon_PandaCub-Base { background-image: url(spritesmith-main-11.png); background-position: -574px -918px; width: 81px; height: 99px; } -.Mount_Icon_Parrot-CottonCandyBlue { +.Mount_Icon_PandaCub-CottonCandyBlue { background-image: url(spritesmith-main-11.png); background-position: -656px -918px; width: 81px; height: 99px; } -.Mount_Icon_Parrot-CottonCandyPink { +.Mount_Icon_PandaCub-CottonCandyPink { background-image: url(spritesmith-main-11.png); background-position: -738px -918px; width: 81px; height: 99px; } -.Mount_Icon_Parrot-Desert { +.Mount_Icon_PandaCub-Desert { background-image: url(spritesmith-main-11.png); background-position: -820px -918px; width: 81px; height: 99px; } -.Mount_Icon_Parrot-Golden { +.Mount_Icon_PandaCub-Floral { background-image: url(spritesmith-main-11.png); background-position: -902px -918px; width: 81px; height: 99px; } -.Mount_Icon_Parrot-Red { +.Mount_Icon_PandaCub-Golden { background-image: url(spritesmith-main-11.png); background-position: -984px -918px; width: 81px; height: 99px; } -.Mount_Icon_Parrot-Shade { +.Mount_Icon_PandaCub-Peppermint { background-image: url(spritesmith-main-11.png); background-position: -1080px 0px; width: 81px; height: 99px; } -.Mount_Icon_Parrot-Skeleton { +.Mount_Icon_PandaCub-Red { background-image: url(spritesmith-main-11.png); background-position: -1080px -100px; width: 81px; height: 99px; } -.Mount_Icon_Parrot-White { +.Mount_Icon_PandaCub-Shade { background-image: url(spritesmith-main-11.png); background-position: -1080px -200px; width: 81px; height: 99px; } -.Mount_Icon_Parrot-Zombie { +.Mount_Icon_PandaCub-Skeleton { background-image: url(spritesmith-main-11.png); background-position: -1080px -300px; width: 81px; height: 99px; } -.Mount_Icon_Penguin-Base { +.Mount_Icon_PandaCub-Spooky { background-image: url(spritesmith-main-11.png); background-position: -1080px -400px; width: 81px; height: 99px; } -.Mount_Icon_Penguin-CottonCandyBlue { +.Mount_Icon_PandaCub-White { background-image: url(spritesmith-main-11.png); background-position: -1080px -500px; width: 81px; height: 99px; } -.Mount_Icon_Penguin-CottonCandyPink { +.Mount_Icon_PandaCub-Zombie { background-image: url(spritesmith-main-11.png); background-position: -1080px -600px; width: 81px; height: 99px; } -.Mount_Icon_Penguin-Desert { +.Mount_Icon_Parrot-Base { background-image: url(spritesmith-main-11.png); background-position: -1080px -700px; width: 81px; height: 99px; } -.Mount_Icon_Penguin-Golden { +.Mount_Icon_Parrot-CottonCandyBlue { background-image: url(spritesmith-main-11.png); background-position: -1080px -800px; width: 81px; height: 99px; } -.Mount_Icon_Penguin-Red { +.Mount_Icon_Parrot-CottonCandyPink { background-image: url(spritesmith-main-11.png); background-position: -1080px -900px; width: 81px; height: 99px; } -.Mount_Icon_Penguin-Shade { +.Mount_Icon_Parrot-Desert { background-image: url(spritesmith-main-11.png); background-position: 0px -1018px; width: 81px; height: 99px; } -.Mount_Icon_Penguin-Skeleton { +.Mount_Icon_Parrot-Golden { background-image: url(spritesmith-main-11.png); background-position: -82px -1018px; width: 81px; height: 99px; } -.Mount_Icon_Penguin-White { +.Mount_Icon_Parrot-Red { background-image: url(spritesmith-main-11.png); background-position: -164px -1018px; width: 81px; height: 99px; } -.Mount_Icon_Penguin-Zombie { +.Mount_Icon_Parrot-Shade { background-image: url(spritesmith-main-11.png); background-position: -246px -1018px; width: 81px; height: 99px; } -.Mount_Icon_Phoenix-Base { +.Mount_Icon_Parrot-Skeleton { background-image: url(spritesmith-main-11.png); background-position: -328px -1018px; width: 81px; height: 99px; } -.Mount_Icon_Rat-Base { +.Mount_Icon_Parrot-White { background-image: url(spritesmith-main-11.png); background-position: -410px -1018px; width: 81px; height: 99px; } -.Mount_Icon_Rat-CottonCandyBlue { +.Mount_Icon_Parrot-Zombie { background-image: url(spritesmith-main-11.png); background-position: -492px -1018px; width: 81px; height: 99px; } -.Mount_Icon_Rat-CottonCandyPink { +.Mount_Icon_Penguin-Base { background-image: url(spritesmith-main-11.png); background-position: -574px -1018px; width: 81px; height: 99px; } -.Mount_Icon_Rat-Desert { +.Mount_Icon_Penguin-CottonCandyBlue { background-image: url(spritesmith-main-11.png); background-position: -656px -1018px; width: 81px; height: 99px; } -.Mount_Icon_Rat-Golden { +.Mount_Icon_Penguin-CottonCandyPink { background-image: url(spritesmith-main-11.png); background-position: -738px -1018px; width: 81px; height: 99px; } -.Mount_Icon_Rat-Red { +.Mount_Icon_Penguin-Desert { background-image: url(spritesmith-main-11.png); background-position: -820px -1018px; width: 81px; height: 99px; } -.Mount_Icon_Rat-Shade { +.Mount_Icon_Penguin-Golden { background-image: url(spritesmith-main-11.png); background-position: -902px -1018px; width: 81px; height: 99px; } -.Mount_Icon_Rat-Skeleton { +.Mount_Icon_Penguin-Red { background-image: url(spritesmith-main-11.png); background-position: -984px -1018px; width: 81px; height: 99px; } -.Mount_Icon_Rat-White { +.Mount_Icon_Penguin-Shade { background-image: url(spritesmith-main-11.png); background-position: -1066px -1018px; width: 81px; height: 99px; } -.Mount_Icon_Rat-Zombie { +.Mount_Icon_Penguin-Skeleton { background-image: url(spritesmith-main-11.png); background-position: -1162px 0px; width: 81px; height: 99px; } -.Mount_Icon_Rock-Base { +.Mount_Icon_Penguin-White { background-image: url(spritesmith-main-11.png); background-position: -1162px -100px; width: 81px; height: 99px; } -.Mount_Icon_Rock-CottonCandyBlue { +.Mount_Icon_Penguin-Zombie { background-image: url(spritesmith-main-11.png); background-position: -1162px -200px; width: 81px; height: 99px; } -.Mount_Icon_Rock-CottonCandyPink { +.Mount_Icon_Phoenix-Base { background-image: url(spritesmith-main-11.png); background-position: -1162px -300px; width: 81px; height: 99px; } -.Mount_Icon_Rock-Desert { +.Mount_Icon_Rat-Base { background-image: url(spritesmith-main-11.png); background-position: -1162px -400px; width: 81px; height: 99px; } -.Mount_Icon_Rock-Golden { +.Mount_Icon_Rat-CottonCandyBlue { background-image: url(spritesmith-main-11.png); background-position: -1162px -500px; width: 81px; height: 99px; } -.Mount_Icon_Rock-Red { +.Mount_Icon_Rat-CottonCandyPink { background-image: url(spritesmith-main-11.png); background-position: -1162px -600px; width: 81px; height: 99px; } -.Mount_Icon_Rock-Shade { +.Mount_Icon_Rat-Desert { background-image: url(spritesmith-main-11.png); background-position: -1162px -700px; width: 81px; height: 99px; } -.Mount_Icon_Rock-Skeleton { +.Mount_Icon_Rat-Golden { background-image: url(spritesmith-main-11.png); background-position: -1162px -800px; width: 81px; height: 99px; } -.Mount_Icon_Rock-White { +.Mount_Icon_Rat-Red { background-image: url(spritesmith-main-11.png); background-position: -1162px -900px; width: 81px; height: 99px; } -.Mount_Icon_Rock-Zombie { +.Mount_Icon_Rat-Shade { background-image: url(spritesmith-main-11.png); background-position: -1162px -1000px; width: 81px; height: 99px; } -.Mount_Icon_Rooster-Base { +.Mount_Icon_Rat-Skeleton { background-image: url(spritesmith-main-11.png); background-position: 0px -1118px; width: 81px; height: 99px; } -.Mount_Icon_Rooster-CottonCandyBlue { +.Mount_Icon_Rat-White { background-image: url(spritesmith-main-11.png); background-position: -82px -1118px; width: 81px; height: 99px; } -.Mount_Icon_Rooster-CottonCandyPink { +.Mount_Icon_Rat-Zombie { background-image: url(spritesmith-main-11.png); background-position: -318px -106px; width: 81px; height: 99px; } -.Mount_Icon_Rooster-Desert { +.Mount_Icon_Rock-Base { background-image: url(spritesmith-main-11.png); background-position: -246px -1118px; width: 81px; height: 99px; } -.Mount_Icon_Rooster-Golden { +.Mount_Icon_Rock-CottonCandyBlue { background-image: url(spritesmith-main-11.png); background-position: -328px -1118px; width: 81px; height: 99px; } -.Mount_Icon_Rooster-Red { +.Mount_Icon_Rock-CottonCandyPink { background-image: url(spritesmith-main-11.png); background-position: -410px -1118px; width: 81px; height: 99px; } -.Mount_Icon_Rooster-Shade { +.Mount_Icon_Rock-Desert { background-image: url(spritesmith-main-11.png); background-position: -492px -1118px; width: 81px; height: 99px; } -.Mount_Icon_Rooster-Skeleton { +.Mount_Icon_Rock-Golden { background-image: url(spritesmith-main-11.png); background-position: -574px -1118px; width: 81px; height: 99px; } -.Mount_Icon_Rooster-White { +.Mount_Icon_Rock-Red { background-image: url(spritesmith-main-11.png); background-position: -656px -1118px; width: 81px; height: 99px; } -.Mount_Icon_Rooster-Zombie { +.Mount_Icon_Rock-Shade { background-image: url(spritesmith-main-11.png); background-position: -738px -1118px; width: 81px; height: 99px; } -.Mount_Icon_Sabretooth-Base { +.Mount_Icon_Rock-Skeleton { background-image: url(spritesmith-main-11.png); background-position: -820px -1118px; width: 81px; height: 99px; } -.Mount_Icon_Sabretooth-CottonCandyBlue { +.Mount_Icon_Rock-White { background-image: url(spritesmith-main-11.png); background-position: -902px -1118px; width: 81px; height: 99px; } -.Mount_Icon_Sabretooth-CottonCandyPink { +.Mount_Icon_Rock-Zombie { background-image: url(spritesmith-main-11.png); background-position: -984px -1118px; width: 81px; height: 99px; } -.Mount_Icon_Sabretooth-Desert { +.Mount_Icon_Rooster-Base { background-image: url(spritesmith-main-11.png); background-position: -1066px -1118px; width: 81px; height: 99px; } -.Mount_Icon_Sabretooth-Golden { +.Mount_Icon_Rooster-CottonCandyBlue { background-image: url(spritesmith-main-11.png); background-position: -1148px -1118px; width: 81px; height: 99px; } -.Mount_Icon_Sabretooth-Red { +.Mount_Icon_Rooster-CottonCandyPink { background-image: url(spritesmith-main-11.png); background-position: -1244px 0px; width: 81px; height: 99px; } -.Mount_Icon_Sabretooth-Shade { +.Mount_Icon_Rooster-Desert { background-image: url(spritesmith-main-11.png); background-position: -1244px -100px; width: 81px; height: 99px; } -.Mount_Icon_Sabretooth-Skeleton { +.Mount_Icon_Rooster-Golden { background-image: url(spritesmith-main-11.png); background-position: -1244px -200px; width: 81px; height: 99px; } -.Mount_Icon_Sabretooth-White { +.Mount_Icon_Rooster-Red { background-image: url(spritesmith-main-11.png); background-position: -1244px -300px; width: 81px; height: 99px; } -.Mount_Icon_Sabretooth-Zombie { +.Mount_Icon_Rooster-Shade { background-image: url(spritesmith-main-11.png); background-position: -1244px -400px; width: 81px; height: 99px; } -.Mount_Icon_Seahorse-Base { +.Mount_Icon_Rooster-Skeleton { background-image: url(spritesmith-main-11.png); background-position: -1244px -500px; width: 81px; height: 99px; } -.Mount_Icon_Seahorse-CottonCandyBlue { +.Mount_Icon_Rooster-White { background-image: url(spritesmith-main-11.png); background-position: -1244px -600px; width: 81px; height: 99px; } -.Mount_Icon_Seahorse-CottonCandyPink { +.Mount_Icon_Rooster-Zombie { background-image: url(spritesmith-main-11.png); background-position: -1244px -700px; width: 81px; height: 99px; } -.Mount_Icon_Seahorse-Desert { +.Mount_Icon_Sabretooth-Base { background-image: url(spritesmith-main-11.png); background-position: -1244px -800px; width: 81px; height: 99px; } -.Mount_Icon_Seahorse-Golden { +.Mount_Icon_Sabretooth-CottonCandyBlue { background-image: url(spritesmith-main-11.png); background-position: -1244px -900px; width: 81px; height: 99px; } -.Mount_Icon_Seahorse-Red { +.Mount_Icon_Sabretooth-CottonCandyPink { background-image: url(spritesmith-main-11.png); background-position: -1244px -1000px; width: 81px; height: 99px; } -.Mount_Icon_Seahorse-Shade { +.Mount_Icon_Sabretooth-Desert { background-image: url(spritesmith-main-11.png); background-position: -1244px -1100px; width: 81px; height: 99px; } -.Mount_Icon_Seahorse-Skeleton { +.Mount_Icon_Sabretooth-Golden { background-image: url(spritesmith-main-11.png); background-position: 0px -1218px; width: 81px; height: 99px; } -.Mount_Icon_Seahorse-White { +.Mount_Icon_Sabretooth-Red { background-image: url(spritesmith-main-11.png); background-position: -82px -1218px; width: 81px; height: 99px; } -.Mount_Icon_Seahorse-Zombie { +.Mount_Icon_Sabretooth-Shade { background-image: url(spritesmith-main-11.png); background-position: -164px -1218px; width: 81px; height: 99px; } -.Mount_Icon_Sheep-Base { +.Mount_Icon_Sabretooth-Skeleton { background-image: url(spritesmith-main-11.png); background-position: -246px -1218px; width: 81px; height: 99px; } -.Mount_Icon_Sheep-CottonCandyBlue { +.Mount_Icon_Sabretooth-White { background-image: url(spritesmith-main-11.png); background-position: -328px -1218px; width: 81px; height: 99px; } -.Mount_Icon_Sheep-CottonCandyPink { +.Mount_Icon_Sabretooth-Zombie { background-image: url(spritesmith-main-11.png); background-position: -410px -1218px; width: 81px; height: 99px; } -.Mount_Icon_Sheep-Desert { +.Mount_Icon_Seahorse-Base { background-image: url(spritesmith-main-11.png); background-position: -492px -1218px; width: 81px; height: 99px; } -.Mount_Icon_Sheep-Golden { +.Mount_Icon_Seahorse-CottonCandyBlue { background-image: url(spritesmith-main-11.png); background-position: -574px -1218px; width: 81px; height: 99px; } -.Mount_Icon_Sheep-Red { +.Mount_Icon_Seahorse-CottonCandyPink { background-image: url(spritesmith-main-11.png); background-position: -656px -1218px; width: 81px; height: 99px; } -.Mount_Icon_Sheep-Shade { +.Mount_Icon_Seahorse-Desert { background-image: url(spritesmith-main-11.png); background-position: -738px -1218px; width: 81px; height: 99px; } -.Mount_Icon_Sheep-Skeleton { +.Mount_Icon_Seahorse-Golden { background-image: url(spritesmith-main-11.png); background-position: -820px -1218px; width: 81px; height: 99px; } -.Mount_Icon_Sheep-White { +.Mount_Icon_Seahorse-Red { background-image: url(spritesmith-main-11.png); background-position: -902px -1218px; width: 81px; height: 99px; } -.Mount_Icon_Sheep-Zombie { +.Mount_Icon_Seahorse-Shade { background-image: url(spritesmith-main-11.png); background-position: -984px -1218px; width: 81px; height: 99px; } -.Mount_Icon_Slime-Base { +.Mount_Icon_Seahorse-Skeleton { background-image: url(spritesmith-main-11.png); background-position: -1066px -1218px; width: 81px; height: 99px; } -.Mount_Icon_Slime-CottonCandyBlue { +.Mount_Icon_Seahorse-White { background-image: url(spritesmith-main-11.png); background-position: -1148px -1218px; width: 81px; height: 99px; } -.Mount_Icon_Slime-CottonCandyPink { +.Mount_Icon_Seahorse-Zombie { background-image: url(spritesmith-main-11.png); background-position: -1230px -1218px; width: 81px; height: 99px; } -.Mount_Icon_Slime-Desert { +.Mount_Icon_Sheep-Base { background-image: url(spritesmith-main-11.png); background-position: -1326px 0px; width: 81px; height: 99px; } -.Mount_Icon_Slime-Golden { +.Mount_Icon_Sheep-CottonCandyBlue { background-image: url(spritesmith-main-11.png); background-position: -1326px -100px; width: 81px; height: 99px; } -.Mount_Icon_Slime-Red { +.Mount_Icon_Sheep-CottonCandyPink { background-image: url(spritesmith-main-11.png); background-position: -1326px -200px; width: 81px; height: 99px; } -.Mount_Icon_Slime-Shade { +.Mount_Icon_Sheep-Desert { background-image: url(spritesmith-main-11.png); background-position: -1326px -300px; width: 81px; height: 99px; } -.Mount_Icon_Slime-Skeleton { +.Mount_Icon_Sheep-Golden { background-image: url(spritesmith-main-11.png); background-position: -1326px -400px; width: 81px; height: 99px; } -.Mount_Icon_Slime-White { +.Mount_Icon_Sheep-Red { background-image: url(spritesmith-main-11.png); background-position: -1326px -500px; width: 81px; height: 99px; } -.Mount_Icon_Slime-Zombie { +.Mount_Icon_Sheep-Shade { background-image: url(spritesmith-main-11.png); background-position: -1326px -600px; width: 81px; height: 99px; } -.Mount_Icon_Snail-Base { +.Mount_Icon_Sheep-Skeleton { background-image: url(spritesmith-main-11.png); background-position: -1326px -700px; width: 81px; height: 99px; } -.Mount_Icon_Snail-CottonCandyBlue { +.Mount_Icon_Sheep-White { background-image: url(spritesmith-main-11.png); background-position: -1326px -800px; width: 81px; height: 99px; } -.Mount_Icon_Snail-CottonCandyPink { +.Mount_Icon_Sheep-Zombie { background-image: url(spritesmith-main-11.png); background-position: -1326px -900px; width: 81px; height: 99px; } -.Mount_Icon_Snail-Desert { +.Mount_Icon_Slime-Base { background-image: url(spritesmith-main-11.png); background-position: -1326px -1000px; width: 81px; height: 99px; } -.Mount_Icon_Snail-Golden { +.Mount_Icon_Slime-CottonCandyBlue { background-image: url(spritesmith-main-11.png); background-position: -1326px -1100px; width: 81px; height: 99px; } -.Mount_Icon_Snail-Red { +.Mount_Icon_Slime-CottonCandyPink { background-image: url(spritesmith-main-11.png); background-position: -1326px -1200px; width: 81px; height: 99px; } -.Mount_Icon_Snail-Shade { +.Mount_Icon_Slime-Desert { background-image: url(spritesmith-main-11.png); background-position: -1408px 0px; width: 81px; height: 99px; } -.Mount_Icon_Snail-Skeleton { +.Mount_Icon_Slime-Golden { background-image: url(spritesmith-main-11.png); background-position: -1408px -100px; width: 81px; height: 99px; } -.Mount_Icon_Snail-White { +.Mount_Icon_Slime-Red { background-image: url(spritesmith-main-11.png); background-position: -1408px -200px; width: 81px; height: 99px; } -.Mount_Icon_Snail-Zombie { +.Mount_Icon_Slime-Shade { background-image: url(spritesmith-main-11.png); background-position: -1408px -300px; width: 81px; height: 99px; } -.Mount_Icon_Snake-Base { +.Mount_Icon_Slime-Skeleton { background-image: url(spritesmith-main-11.png); background-position: -1408px -400px; width: 81px; height: 99px; } -.Mount_Icon_Snake-CottonCandyBlue { +.Mount_Icon_Slime-White { background-image: url(spritesmith-main-11.png); background-position: -1408px -500px; width: 81px; height: 99px; } -.Mount_Icon_Snake-CottonCandyPink { +.Mount_Icon_Slime-Zombie { background-image: url(spritesmith-main-11.png); background-position: -1408px -600px; width: 81px; height: 99px; } -.Mount_Icon_Snake-Desert { +.Mount_Icon_Snail-Base { background-image: url(spritesmith-main-11.png); background-position: -1408px -700px; width: 81px; height: 99px; } -.Mount_Icon_Snake-Golden { +.Mount_Icon_Snail-CottonCandyBlue { background-image: url(spritesmith-main-11.png); background-position: -1408px -800px; width: 81px; height: 99px; } -.Mount_Icon_Snake-Red { +.Mount_Icon_Snail-CottonCandyPink { background-image: url(spritesmith-main-11.png); background-position: -1408px -900px; width: 81px; height: 99px; } -.Mount_Icon_Snake-Shade { +.Mount_Icon_Snail-Desert { background-image: url(spritesmith-main-11.png); background-position: -1408px -1000px; width: 81px; height: 99px; } -.Mount_Icon_Snake-Skeleton { +.Mount_Icon_Snail-Golden { background-image: url(spritesmith-main-11.png); background-position: -1408px -1100px; width: 81px; height: 99px; } -.Mount_Icon_Snake-White { +.Mount_Icon_Snail-Red { background-image: url(spritesmith-main-11.png); background-position: -1408px -1200px; width: 81px; height: 99px; } -.Mount_Icon_Snake-Zombie { +.Mount_Icon_Snail-Shade { background-image: url(spritesmith-main-11.png); background-position: 0px -1318px; width: 81px; height: 99px; } -.Mount_Icon_Spider-Base { +.Mount_Icon_Snail-Skeleton { background-image: url(spritesmith-main-11.png); background-position: -82px -1318px; width: 81px; height: 99px; } -.Mount_Icon_Spider-CottonCandyBlue { +.Mount_Icon_Snail-White { background-image: url(spritesmith-main-11.png); background-position: -164px -1318px; width: 81px; height: 99px; } -.Mount_Icon_Spider-CottonCandyPink { +.Mount_Icon_Snail-Zombie { background-image: url(spritesmith-main-11.png); background-position: -246px -1318px; width: 81px; height: 99px; } -.Mount_Icon_Spider-Desert { +.Mount_Icon_Snake-Base { background-image: url(spritesmith-main-11.png); background-position: -328px -1318px; width: 81px; height: 99px; } -.Mount_Icon_Spider-Golden { +.Mount_Icon_Snake-CottonCandyBlue { background-image: url(spritesmith-main-11.png); background-position: -410px -1318px; width: 81px; height: 99px; } -.Mount_Icon_Spider-Red { +.Mount_Icon_Snake-CottonCandyPink { background-image: url(spritesmith-main-11.png); background-position: -492px -1318px; width: 81px; height: 99px; } -.Mount_Icon_Spider-Shade { +.Mount_Icon_Snake-Desert { background-image: url(spritesmith-main-11.png); background-position: -574px -1318px; width: 81px; height: 99px; } -.Mount_Icon_Spider-Skeleton { +.Mount_Icon_Snake-Golden { background-image: url(spritesmith-main-11.png); background-position: -656px -1318px; width: 81px; height: 99px; } -.Mount_Icon_Spider-White { +.Mount_Icon_Snake-Red { background-image: url(spritesmith-main-11.png); background-position: -738px -1318px; width: 81px; height: 99px; } -.Mount_Icon_Spider-Zombie { +.Mount_Icon_Snake-Shade { background-image: url(spritesmith-main-11.png); background-position: -820px -1318px; width: 81px; height: 99px; } -.Mount_Icon_TRex-Base { - background-image: url(spritesmith-main-11.png); - background-position: -164px -1418px; - width: 81px; - height: 99px; -} -.Mount_Icon_TRex-CottonCandyBlue { - background-image: url(spritesmith-main-11.png); - background-position: -246px -1418px; - width: 81px; - height: 99px; -} -.Mount_Icon_TRex-CottonCandyPink { - background-image: url(spritesmith-main-11.png); - background-position: -328px -1418px; - width: 81px; - height: 99px; -} -.Mount_Icon_TRex-Desert { - background-image: url(spritesmith-main-11.png); - background-position: -410px -1418px; - width: 81px; - height: 99px; -} -.Mount_Icon_TRex-Golden { - background-image: url(spritesmith-main-11.png); - background-position: -492px -1418px; - width: 81px; - height: 99px; -} -.Mount_Icon_TRex-Red { - background-image: url(spritesmith-main-11.png); - background-position: -574px -1418px; - width: 81px; - height: 99px; -} -.Mount_Icon_TRex-Shade { - background-image: url(spritesmith-main-11.png); - background-position: -656px -1418px; - width: 81px; - height: 99px; -} -.Mount_Icon_TRex-Skeleton { - background-image: url(spritesmith-main-11.png); - background-position: -738px -1418px; - width: 81px; - height: 99px; -} -.Mount_Icon_TRex-White { - background-image: url(spritesmith-main-11.png); - background-position: -820px -1418px; - width: 81px; - height: 99px; -} -.Mount_Icon_TRex-Zombie { - background-image: url(spritesmith-main-11.png); - background-position: -902px -1418px; - width: 81px; - height: 99px; -} -.Mount_Icon_TigerCub-Base { +.Mount_Icon_Snake-Skeleton { background-image: url(spritesmith-main-11.png); background-position: -902px -1318px; width: 81px; height: 99px; } -.Mount_Icon_TigerCub-CottonCandyBlue { +.Mount_Icon_Snake-White { background-image: url(spritesmith-main-11.png); background-position: -984px -1318px; width: 81px; height: 99px; } -.Mount_Icon_TigerCub-CottonCandyPink { +.Mount_Icon_Snake-Zombie { background-image: url(spritesmith-main-11.png); background-position: -1066px -1318px; width: 81px; height: 99px; } -.Mount_Icon_TigerCub-Desert { +.Mount_Icon_Spider-Base { background-image: url(spritesmith-main-11.png); background-position: -1148px -1318px; width: 81px; height: 99px; } -.Mount_Icon_TigerCub-Floral { +.Mount_Icon_Spider-CottonCandyBlue { background-image: url(spritesmith-main-11.png); background-position: -1230px -1318px; width: 81px; height: 99px; } -.Mount_Icon_TigerCub-Golden { +.Mount_Icon_Spider-CottonCandyPink { background-image: url(spritesmith-main-11.png); background-position: -1312px -1318px; width: 81px; height: 99px; } -.Mount_Icon_TigerCub-Peppermint { +.Mount_Icon_Spider-Desert { background-image: url(spritesmith-main-11.png); background-position: -1394px -1318px; width: 81px; height: 99px; } -.Mount_Icon_TigerCub-Red { +.Mount_Icon_Spider-Golden { background-image: url(spritesmith-main-11.png); background-position: -1490px 0px; width: 81px; height: 99px; } -.Mount_Icon_TigerCub-Shade { +.Mount_Icon_Spider-Red { background-image: url(spritesmith-main-11.png); background-position: -1490px -100px; width: 81px; height: 99px; } -.Mount_Icon_TigerCub-Skeleton { +.Mount_Icon_Spider-Shade { background-image: url(spritesmith-main-11.png); background-position: -1490px -200px; width: 81px; height: 99px; } -.Mount_Icon_TigerCub-Spooky { +.Mount_Icon_Spider-Skeleton { background-image: url(spritesmith-main-11.png); background-position: -1490px -300px; width: 81px; height: 99px; } -.Mount_Icon_TigerCub-White { +.Mount_Icon_Spider-White { background-image: url(spritesmith-main-11.png); background-position: -1490px -400px; width: 81px; height: 99px; } -.Mount_Icon_TigerCub-Zombie { +.Mount_Icon_Spider-Zombie { background-image: url(spritesmith-main-11.png); background-position: -1490px -500px; width: 81px; height: 99px; } -.Mount_Icon_Treeling-Base { +.Mount_Icon_TRex-Base { + background-image: url(spritesmith-main-11.png); + background-position: -1230px -1418px; + width: 81px; + height: 99px; +} +.Mount_Icon_TRex-CottonCandyBlue { + background-image: url(spritesmith-main-11.png); + background-position: -1312px -1418px; + width: 81px; + height: 99px; +} +.Mount_Icon_TRex-CottonCandyPink { + background-image: url(spritesmith-main-11.png); + background-position: -1394px -1418px; + width: 81px; + height: 99px; +} +.Mount_Icon_TRex-Desert { + background-image: url(spritesmith-main-11.png); + background-position: -1476px -1418px; + width: 81px; + height: 99px; +} +.Mount_Icon_TRex-Golden { + background-image: url(spritesmith-main-11.png); + background-position: -1572px 0px; + width: 81px; + height: 99px; +} +.Mount_Icon_TRex-Red { + background-image: url(spritesmith-main-11.png); + background-position: -1572px -100px; + width: 81px; + height: 99px; +} +.Mount_Icon_TRex-Shade { + background-image: url(spritesmith-main-11.png); + background-position: -1572px -200px; + width: 81px; + height: 99px; +} +.Mount_Icon_TRex-Skeleton { + background-image: url(spritesmith-main-11.png); + background-position: -1572px -300px; + width: 81px; + height: 99px; +} +.Mount_Icon_TRex-White { + background-image: url(spritesmith-main-11.png); + background-position: -1572px -400px; + width: 81px; + height: 99px; +} +.Mount_Icon_TRex-Zombie { + background-image: url(spritesmith-main-11.png); + background-position: -1572px -500px; + width: 81px; + height: 99px; +} +.Mount_Icon_TigerCub-Base { background-image: url(spritesmith-main-11.png); background-position: -1490px -600px; width: 81px; height: 99px; } -.Mount_Icon_Treeling-CottonCandyBlue { +.Mount_Icon_TigerCub-CottonCandyBlue { background-image: url(spritesmith-main-11.png); background-position: -1490px -700px; width: 81px; height: 99px; } -.Mount_Icon_Treeling-CottonCandyPink { +.Mount_Icon_TigerCub-CottonCandyPink { background-image: url(spritesmith-main-11.png); background-position: -1490px -800px; width: 81px; height: 99px; } -.Mount_Icon_Treeling-Desert { +.Mount_Icon_TigerCub-Desert { background-image: url(spritesmith-main-11.png); background-position: -1490px -900px; width: 81px; height: 99px; } -.Mount_Icon_Treeling-Golden { +.Mount_Icon_TigerCub-Floral { background-image: url(spritesmith-main-11.png); background-position: -1490px -1000px; width: 81px; height: 99px; } -.Mount_Icon_Treeling-Red { +.Mount_Icon_TigerCub-Golden { background-image: url(spritesmith-main-11.png); background-position: -1490px -1100px; width: 81px; height: 99px; } -.Mount_Icon_Treeling-Shade { +.Mount_Icon_TigerCub-Peppermint { background-image: url(spritesmith-main-11.png); background-position: -1490px -1200px; width: 81px; height: 99px; } -.Mount_Icon_Treeling-Skeleton { +.Mount_Icon_TigerCub-Red { background-image: url(spritesmith-main-11.png); background-position: -1490px -1300px; width: 81px; height: 99px; } -.Mount_Icon_Treeling-White { +.Mount_Icon_TigerCub-Shade { background-image: url(spritesmith-main-11.png); background-position: 0px -1418px; width: 81px; height: 99px; } -.Mount_Icon_Treeling-Zombie { +.Mount_Icon_TigerCub-Skeleton { background-image: url(spritesmith-main-11.png); background-position: -82px -1418px; width: 81px; height: 99px; } -.Mount_Icon_Turkey-Base { +.Mount_Icon_TigerCub-Spooky { + background-image: url(spritesmith-main-11.png); + background-position: -164px -1418px; + width: 81px; + height: 99px; +} +.Mount_Icon_TigerCub-White { + background-image: url(spritesmith-main-11.png); + background-position: -246px -1418px; + width: 81px; + height: 99px; +} +.Mount_Icon_TigerCub-Zombie { + background-image: url(spritesmith-main-11.png); + background-position: -328px -1418px; + width: 81px; + height: 99px; +} +.Mount_Icon_Treeling-Base { + background-image: url(spritesmith-main-11.png); + background-position: -410px -1418px; + width: 81px; + height: 99px; +} +.Mount_Icon_Treeling-CottonCandyBlue { + background-image: url(spritesmith-main-11.png); + background-position: -492px -1418px; + width: 81px; + height: 99px; +} +.Mount_Icon_Treeling-CottonCandyPink { + background-image: url(spritesmith-main-11.png); + background-position: -574px -1418px; + width: 81px; + height: 99px; +} +.Mount_Icon_Treeling-Desert { + background-image: url(spritesmith-main-11.png); + background-position: -656px -1418px; + width: 81px; + height: 99px; +} +.Mount_Icon_Treeling-Golden { + background-image: url(spritesmith-main-11.png); + background-position: -738px -1418px; + width: 81px; + height: 99px; +} +.Mount_Icon_Treeling-Red { + background-image: url(spritesmith-main-11.png); + background-position: -820px -1418px; + width: 81px; + height: 99px; +} +.Mount_Icon_Treeling-Shade { + background-image: url(spritesmith-main-11.png); + background-position: -902px -1418px; + width: 81px; + height: 99px; +} +.Mount_Icon_Treeling-Skeleton { background-image: url(spritesmith-main-11.png); background-position: -984px -1418px; width: 81px; height: 99px; } +.Mount_Icon_Treeling-White { + background-image: url(spritesmith-main-11.png); + background-position: -1066px -1418px; + width: 81px; + height: 99px; +} +.Mount_Icon_Treeling-Zombie { + background-image: url(spritesmith-main-11.png); + background-position: -1148px -1418px; + width: 81px; + height: 99px; +} +.Mount_Icon_Turkey-Base { + background-image: url(spritesmith-main-11.png); + background-position: -1572px -600px; + width: 81px; + height: 99px; +} .Mount_Icon_Turtle-Base { background-image: url(spritesmith-main-11.png); background-position: -212px -106px; @@ -1716,257 +1794,179 @@ } .Mount_Icon_Unicorn-Base { background-image: url(spritesmith-main-11.png); - background-position: -1572px -400px; + background-position: -164px -1518px; width: 81px; height: 99px; } .Mount_Icon_Unicorn-CottonCandyBlue { background-image: url(spritesmith-main-11.png); - background-position: -1572px -500px; + background-position: -246px -1518px; width: 81px; height: 99px; } .Mount_Icon_Unicorn-CottonCandyPink { background-image: url(spritesmith-main-11.png); - background-position: -1572px -600px; + background-position: -328px -1518px; width: 81px; height: 99px; } .Mount_Icon_Unicorn-Desert { background-image: url(spritesmith-main-11.png); - background-position: -1572px -700px; + background-position: -410px -1518px; width: 81px; height: 99px; } .Mount_Icon_Unicorn-Golden { background-image: url(spritesmith-main-11.png); - background-position: -1572px -800px; + background-position: -492px -1518px; width: 81px; height: 99px; } .Mount_Icon_Unicorn-Red { background-image: url(spritesmith-main-11.png); - background-position: -1572px -900px; + background-position: -574px -1518px; width: 81px; height: 99px; } .Mount_Icon_Unicorn-Shade { background-image: url(spritesmith-main-11.png); - background-position: -1572px -1000px; + background-position: -656px -1518px; width: 81px; height: 99px; } .Mount_Icon_Unicorn-Skeleton { background-image: url(spritesmith-main-11.png); - background-position: -1572px -1100px; + background-position: -738px -1518px; width: 81px; height: 99px; } .Mount_Icon_Unicorn-White { background-image: url(spritesmith-main-11.png); - background-position: -1572px -1200px; + background-position: -820px -1518px; width: 81px; height: 99px; } .Mount_Icon_Unicorn-Zombie { background-image: url(spritesmith-main-11.png); - background-position: -1572px -1300px; + background-position: -902px -1518px; width: 81px; height: 99px; } .Mount_Icon_Whale-Base { background-image: url(spritesmith-main-11.png); - background-position: -1572px -1400px; + background-position: -984px -1518px; width: 81px; height: 99px; } .Mount_Icon_Whale-CottonCandyBlue { background-image: url(spritesmith-main-11.png); - background-position: 0px -1518px; + background-position: -1066px -1518px; width: 81px; height: 99px; } .Mount_Icon_Whale-CottonCandyPink { background-image: url(spritesmith-main-11.png); - background-position: -82px -1518px; + background-position: -1148px -1518px; width: 81px; height: 99px; } .Mount_Icon_Whale-Desert { background-image: url(spritesmith-main-11.png); - background-position: -164px -1518px; + background-position: -1230px -1518px; width: 81px; height: 99px; } .Mount_Icon_Whale-Golden { background-image: url(spritesmith-main-11.png); - background-position: -246px -1518px; + background-position: -1312px -1518px; width: 81px; height: 99px; } .Mount_Icon_Whale-Red { background-image: url(spritesmith-main-11.png); - background-position: -328px -1518px; + background-position: -1394px -1518px; width: 81px; height: 99px; } .Mount_Icon_Whale-Shade { background-image: url(spritesmith-main-11.png); - background-position: -410px -1518px; + background-position: -1476px -1518px; width: 81px; height: 99px; } .Mount_Icon_Whale-Skeleton { background-image: url(spritesmith-main-11.png); - background-position: -492px -1518px; + background-position: -1558px -1518px; width: 81px; height: 99px; } .Mount_Icon_Whale-White { background-image: url(spritesmith-main-11.png); - background-position: -574px -1518px; + background-position: -1654px 0px; width: 81px; height: 99px; } .Mount_Icon_Whale-Zombie { background-image: url(spritesmith-main-11.png); - background-position: -656px -1518px; + background-position: -1654px -100px; width: 81px; height: 99px; } .Mount_Icon_Wolf-Base { background-image: url(spritesmith-main-11.png); - background-position: -738px -1518px; + background-position: -1654px -200px; width: 81px; height: 99px; } .Mount_Icon_Wolf-CottonCandyBlue { background-image: url(spritesmith-main-11.png); - background-position: -820px -1518px; + background-position: -1654px -300px; width: 81px; height: 99px; } .Mount_Icon_Wolf-CottonCandyPink { background-image: url(spritesmith-main-11.png); - background-position: -902px -1518px; + background-position: -1654px -400px; width: 81px; height: 99px; } .Mount_Icon_Wolf-Desert { background-image: url(spritesmith-main-11.png); - background-position: -984px -1518px; + background-position: -1654px -500px; width: 81px; height: 99px; } .Mount_Icon_Wolf-Floral { background-image: url(spritesmith-main-11.png); - background-position: -1066px -1518px; + background-position: -1654px -600px; width: 81px; height: 99px; } .Mount_Icon_Wolf-Golden { background-image: url(spritesmith-main-11.png); - background-position: -1148px -1518px; + background-position: -1654px -700px; width: 81px; height: 99px; } .Mount_Icon_Wolf-Peppermint { background-image: url(spritesmith-main-11.png); - background-position: -1230px -1518px; + background-position: -1654px -800px; width: 81px; height: 99px; } .Mount_Icon_Wolf-Red { background-image: url(spritesmith-main-11.png); - background-position: -1312px -1518px; + background-position: -1654px -900px; width: 81px; height: 99px; } .Mount_Icon_Wolf-Shade { background-image: url(spritesmith-main-11.png); - background-position: -1394px -1518px; + background-position: -1654px -1000px; width: 81px; height: 99px; } .Mount_Icon_Wolf-Skeleton { - background-image: url(spritesmith-main-11.png); - background-position: -1476px -1518px; - width: 81px; - height: 99px; -} -.Mount_Icon_Wolf-Spooky { - background-image: url(spritesmith-main-11.png); - background-position: -1558px -1518px; - width: 81px; - height: 99px; -} -.Mount_Icon_Wolf-White { - background-image: url(spritesmith-main-11.png); - background-position: -1654px 0px; - width: 81px; - height: 99px; -} -.Mount_Icon_Wolf-Zombie { - background-image: url(spritesmith-main-11.png); - background-position: -1654px -100px; - width: 81px; - height: 99px; -} -.Pet-Axolotl-Base { - background-image: url(spritesmith-main-11.png); - background-position: -1654px -200px; - width: 81px; - height: 99px; -} -.Pet-Axolotl-CottonCandyBlue { - background-image: url(spritesmith-main-11.png); - background-position: -1654px -300px; - width: 81px; - height: 99px; -} -.Pet-Axolotl-CottonCandyPink { - background-image: url(spritesmith-main-11.png); - background-position: -1654px -400px; - width: 81px; - height: 99px; -} -.Pet-Axolotl-Desert { - background-image: url(spritesmith-main-11.png); - background-position: -1654px -500px; - width: 81px; - height: 99px; -} -.Pet-Axolotl-Golden { - background-image: url(spritesmith-main-11.png); - background-position: -1654px -600px; - width: 81px; - height: 99px; -} -.Pet-Axolotl-Red { - background-image: url(spritesmith-main-11.png); - background-position: -1654px -700px; - width: 81px; - height: 99px; -} -.Pet-Axolotl-Shade { - background-image: url(spritesmith-main-11.png); - background-position: -1654px -800px; - width: 81px; - height: 99px; -} -.Pet-Axolotl-Skeleton { - background-image: url(spritesmith-main-11.png); - background-position: -1654px -900px; - width: 81px; - height: 99px; -} -.Pet-Axolotl-White { - background-image: url(spritesmith-main-11.png); - background-position: -1654px -1000px; - width: 81px; - height: 99px; -} -.Pet-Axolotl-Zombie { background-image: url(spritesmith-main-11.png); background-position: -1654px -1100px; width: 81px; diff --git a/common/dist/sprites/spritesmith-main-11.png b/common/dist/sprites/spritesmith-main-11.png index ca5203f252..62dd6bde44 100644 Binary files a/common/dist/sprites/spritesmith-main-11.png and b/common/dist/sprites/spritesmith-main-11.png differ diff --git a/common/dist/sprites/spritesmith-main-12.css b/common/dist/sprites/spritesmith-main-12.css index ed8b19c9c0..4ffc791c42 100644 --- a/common/dist/sprites/spritesmith-main-12.css +++ b/common/dist/sprites/spritesmith-main-12.css @@ -1,1990 +1,1990 @@ -.Pet-BearCub-Base { +.Mount_Icon_Wolf-Spooky { background-image: url(spritesmith-main-12.png); background-position: -82px 0px; width: 81px; height: 99px; } -.Pet-BearCub-CottonCandyBlue { +.Mount_Icon_Wolf-White { background-image: url(spritesmith-main-12.png); background-position: -82px -1100px; width: 81px; height: 99px; } -.Pet-BearCub-CottonCandyPink { +.Mount_Icon_Wolf-Zombie { background-image: url(spritesmith-main-12.png); background-position: -164px 0px; width: 81px; height: 99px; } -.Pet-BearCub-Desert { +.Pet-Axolotl-Base { background-image: url(spritesmith-main-12.png); background-position: 0px -100px; width: 81px; height: 99px; } -.Pet-BearCub-Floral { +.Pet-Axolotl-CottonCandyBlue { background-image: url(spritesmith-main-12.png); background-position: -82px -100px; width: 81px; height: 99px; } -.Pet-BearCub-Golden { +.Pet-Axolotl-CottonCandyPink { background-image: url(spritesmith-main-12.png); background-position: -164px -100px; width: 81px; height: 99px; } -.Pet-BearCub-Peppermint { +.Pet-Axolotl-Desert { background-image: url(spritesmith-main-12.png); background-position: -246px 0px; width: 81px; height: 99px; } -.Pet-BearCub-Polar { +.Pet-Axolotl-Golden { background-image: url(spritesmith-main-12.png); background-position: -246px -100px; width: 81px; height: 99px; } -.Pet-BearCub-Red { +.Pet-Axolotl-Red { background-image: url(spritesmith-main-12.png); background-position: 0px -200px; width: 81px; height: 99px; } -.Pet-BearCub-Shade { +.Pet-Axolotl-Shade { background-image: url(spritesmith-main-12.png); background-position: -82px -200px; width: 81px; height: 99px; } -.Pet-BearCub-Skeleton { +.Pet-Axolotl-Skeleton { background-image: url(spritesmith-main-12.png); background-position: -164px -200px; width: 81px; height: 99px; } -.Pet-BearCub-Spooky { +.Pet-Axolotl-White { background-image: url(spritesmith-main-12.png); background-position: -246px -200px; width: 81px; height: 99px; } -.Pet-BearCub-White { +.Pet-Axolotl-Zombie { background-image: url(spritesmith-main-12.png); background-position: -328px 0px; width: 81px; height: 99px; } -.Pet-BearCub-Zombie { +.Pet-BearCub-Base { background-image: url(spritesmith-main-12.png); background-position: -328px -100px; width: 81px; height: 99px; } -.Pet-Bunny-Base { +.Pet-BearCub-CottonCandyBlue { background-image: url(spritesmith-main-12.png); background-position: -328px -200px; width: 81px; height: 99px; } -.Pet-Bunny-CottonCandyBlue { +.Pet-BearCub-CottonCandyPink { background-image: url(spritesmith-main-12.png); background-position: 0px -300px; width: 81px; height: 99px; } -.Pet-Bunny-CottonCandyPink { +.Pet-BearCub-Desert { background-image: url(spritesmith-main-12.png); background-position: -82px -300px; width: 81px; height: 99px; } -.Pet-Bunny-Desert { +.Pet-BearCub-Floral { background-image: url(spritesmith-main-12.png); background-position: -164px -300px; width: 81px; height: 99px; } -.Pet-Bunny-Golden { +.Pet-BearCub-Golden { background-image: url(spritesmith-main-12.png); background-position: -246px -300px; width: 81px; height: 99px; } -.Pet-Bunny-Red { +.Pet-BearCub-Peppermint { background-image: url(spritesmith-main-12.png); background-position: -328px -300px; width: 81px; height: 99px; } -.Pet-Bunny-Shade { +.Pet-BearCub-Polar { background-image: url(spritesmith-main-12.png); background-position: -410px 0px; width: 81px; height: 99px; } -.Pet-Bunny-Skeleton { +.Pet-BearCub-Red { background-image: url(spritesmith-main-12.png); background-position: -410px -100px; width: 81px; height: 99px; } -.Pet-Bunny-White { +.Pet-BearCub-Shade { background-image: url(spritesmith-main-12.png); background-position: -410px -200px; width: 81px; height: 99px; } -.Pet-Bunny-Zombie { +.Pet-BearCub-Skeleton { background-image: url(spritesmith-main-12.png); background-position: -410px -300px; width: 81px; height: 99px; } -.Pet-Cactus-Base { +.Pet-BearCub-Spooky { background-image: url(spritesmith-main-12.png); background-position: -492px 0px; width: 81px; height: 99px; } -.Pet-Cactus-CottonCandyBlue { +.Pet-BearCub-White { background-image: url(spritesmith-main-12.png); background-position: -492px -100px; width: 81px; height: 99px; } -.Pet-Cactus-CottonCandyPink { +.Pet-BearCub-Zombie { background-image: url(spritesmith-main-12.png); background-position: -492px -200px; width: 81px; height: 99px; } -.Pet-Cactus-Desert { +.Pet-Bunny-Base { background-image: url(spritesmith-main-12.png); background-position: -492px -300px; width: 81px; height: 99px; } -.Pet-Cactus-Floral { +.Pet-Bunny-CottonCandyBlue { background-image: url(spritesmith-main-12.png); background-position: 0px -400px; width: 81px; height: 99px; } -.Pet-Cactus-Golden { +.Pet-Bunny-CottonCandyPink { background-image: url(spritesmith-main-12.png); background-position: -82px -400px; width: 81px; height: 99px; } -.Pet-Cactus-Peppermint { +.Pet-Bunny-Desert { background-image: url(spritesmith-main-12.png); background-position: -164px -400px; width: 81px; height: 99px; } -.Pet-Cactus-Red { +.Pet-Bunny-Golden { background-image: url(spritesmith-main-12.png); background-position: -246px -400px; width: 81px; height: 99px; } -.Pet-Cactus-Shade { +.Pet-Bunny-Red { background-image: url(spritesmith-main-12.png); background-position: -328px -400px; width: 81px; height: 99px; } -.Pet-Cactus-Skeleton { +.Pet-Bunny-Shade { background-image: url(spritesmith-main-12.png); background-position: -410px -400px; width: 81px; height: 99px; } -.Pet-Cactus-Spooky { +.Pet-Bunny-Skeleton { background-image: url(spritesmith-main-12.png); background-position: -492px -400px; width: 81px; height: 99px; } -.Pet-Cactus-White { +.Pet-Bunny-White { background-image: url(spritesmith-main-12.png); background-position: -574px 0px; width: 81px; height: 99px; } -.Pet-Cactus-Zombie { +.Pet-Bunny-Zombie { background-image: url(spritesmith-main-12.png); background-position: -574px -100px; width: 81px; height: 99px; } -.Pet-Cheetah-Base { +.Pet-Cactus-Base { background-image: url(spritesmith-main-12.png); background-position: -574px -200px; width: 81px; height: 99px; } -.Pet-Cheetah-CottonCandyBlue { +.Pet-Cactus-CottonCandyBlue { background-image: url(spritesmith-main-12.png); background-position: -574px -300px; width: 81px; height: 99px; } -.Pet-Cheetah-CottonCandyPink { +.Pet-Cactus-CottonCandyPink { background-image: url(spritesmith-main-12.png); background-position: -574px -400px; width: 81px; height: 99px; } -.Pet-Cheetah-Desert { +.Pet-Cactus-Desert { background-image: url(spritesmith-main-12.png); background-position: 0px -500px; width: 81px; height: 99px; } -.Pet-Cheetah-Golden { +.Pet-Cactus-Floral { background-image: url(spritesmith-main-12.png); background-position: -82px -500px; width: 81px; height: 99px; } -.Pet-Cheetah-Red { +.Pet-Cactus-Golden { background-image: url(spritesmith-main-12.png); background-position: -164px -500px; width: 81px; height: 99px; } -.Pet-Cheetah-Shade { +.Pet-Cactus-Peppermint { background-image: url(spritesmith-main-12.png); background-position: -246px -500px; width: 81px; height: 99px; } -.Pet-Cheetah-Skeleton { +.Pet-Cactus-Red { background-image: url(spritesmith-main-12.png); background-position: -328px -500px; width: 81px; height: 99px; } -.Pet-Cheetah-White { +.Pet-Cactus-Shade { background-image: url(spritesmith-main-12.png); background-position: -410px -500px; width: 81px; height: 99px; } -.Pet-Cheetah-Zombie { +.Pet-Cactus-Skeleton { background-image: url(spritesmith-main-12.png); background-position: -492px -500px; width: 81px; height: 99px; } -.Pet-Cuttlefish-Base { +.Pet-Cactus-Spooky { background-image: url(spritesmith-main-12.png); background-position: -574px -500px; width: 81px; height: 99px; } -.Pet-Cuttlefish-CottonCandyBlue { +.Pet-Cactus-White { background-image: url(spritesmith-main-12.png); background-position: -656px 0px; width: 81px; height: 99px; } -.Pet-Cuttlefish-CottonCandyPink { +.Pet-Cactus-Zombie { background-image: url(spritesmith-main-12.png); background-position: -656px -100px; width: 81px; height: 99px; } -.Pet-Cuttlefish-Desert { +.Pet-Cheetah-Base { background-image: url(spritesmith-main-12.png); background-position: -656px -200px; width: 81px; height: 99px; } -.Pet-Cuttlefish-Golden { +.Pet-Cheetah-CottonCandyBlue { background-image: url(spritesmith-main-12.png); background-position: -656px -300px; width: 81px; height: 99px; } -.Pet-Cuttlefish-Red { +.Pet-Cheetah-CottonCandyPink { background-image: url(spritesmith-main-12.png); background-position: -656px -400px; width: 81px; height: 99px; } -.Pet-Cuttlefish-Shade { +.Pet-Cheetah-Desert { background-image: url(spritesmith-main-12.png); background-position: -656px -500px; width: 81px; height: 99px; } -.Pet-Cuttlefish-Skeleton { +.Pet-Cheetah-Golden { background-image: url(spritesmith-main-12.png); background-position: 0px -600px; width: 81px; height: 99px; } -.Pet-Cuttlefish-White { +.Pet-Cheetah-Red { background-image: url(spritesmith-main-12.png); background-position: -82px -600px; width: 81px; height: 99px; } -.Pet-Cuttlefish-Zombie { +.Pet-Cheetah-Shade { background-image: url(spritesmith-main-12.png); background-position: -164px -600px; width: 81px; height: 99px; } -.Pet-Deer-Base { +.Pet-Cheetah-Skeleton { background-image: url(spritesmith-main-12.png); background-position: -246px -600px; width: 81px; height: 99px; } -.Pet-Deer-CottonCandyBlue { +.Pet-Cheetah-White { background-image: url(spritesmith-main-12.png); background-position: -328px -600px; width: 81px; height: 99px; } -.Pet-Deer-CottonCandyPink { +.Pet-Cheetah-Zombie { background-image: url(spritesmith-main-12.png); background-position: -410px -600px; width: 81px; height: 99px; } -.Pet-Deer-Desert { +.Pet-Cuttlefish-Base { background-image: url(spritesmith-main-12.png); background-position: -492px -600px; width: 81px; height: 99px; } -.Pet-Deer-Golden { +.Pet-Cuttlefish-CottonCandyBlue { background-image: url(spritesmith-main-12.png); background-position: -574px -600px; width: 81px; height: 99px; } -.Pet-Deer-Red { +.Pet-Cuttlefish-CottonCandyPink { background-image: url(spritesmith-main-12.png); background-position: -656px -600px; width: 81px; height: 99px; } -.Pet-Deer-Shade { +.Pet-Cuttlefish-Desert { background-image: url(spritesmith-main-12.png); background-position: -738px 0px; width: 81px; height: 99px; } -.Pet-Deer-Skeleton { +.Pet-Cuttlefish-Golden { background-image: url(spritesmith-main-12.png); background-position: -738px -100px; width: 81px; height: 99px; } -.Pet-Deer-White { +.Pet-Cuttlefish-Red { background-image: url(spritesmith-main-12.png); background-position: -738px -200px; width: 81px; height: 99px; } -.Pet-Deer-Zombie { +.Pet-Cuttlefish-Shade { background-image: url(spritesmith-main-12.png); background-position: -738px -300px; width: 81px; height: 99px; } -.Pet-Dragon-Base { +.Pet-Cuttlefish-Skeleton { background-image: url(spritesmith-main-12.png); background-position: -738px -400px; width: 81px; height: 99px; } -.Pet-Dragon-CottonCandyBlue { +.Pet-Cuttlefish-White { background-image: url(spritesmith-main-12.png); background-position: -738px -500px; width: 81px; height: 99px; } -.Pet-Dragon-CottonCandyPink { +.Pet-Cuttlefish-Zombie { background-image: url(spritesmith-main-12.png); background-position: -738px -600px; width: 81px; height: 99px; } -.Pet-Dragon-Desert { +.Pet-Deer-Base { background-image: url(spritesmith-main-12.png); background-position: 0px -700px; width: 81px; height: 99px; } -.Pet-Dragon-Floral { +.Pet-Deer-CottonCandyBlue { background-image: url(spritesmith-main-12.png); background-position: -82px -700px; width: 81px; height: 99px; } -.Pet-Dragon-Golden { +.Pet-Deer-CottonCandyPink { background-image: url(spritesmith-main-12.png); background-position: -164px -700px; width: 81px; height: 99px; } -.Pet-Dragon-Hydra { +.Pet-Deer-Desert { background-image: url(spritesmith-main-12.png); background-position: -246px -700px; width: 81px; height: 99px; } -.Pet-Dragon-Peppermint { +.Pet-Deer-Golden { background-image: url(spritesmith-main-12.png); background-position: -328px -700px; width: 81px; height: 99px; } -.Pet-Dragon-Red { +.Pet-Deer-Red { background-image: url(spritesmith-main-12.png); background-position: -410px -700px; width: 81px; height: 99px; } -.Pet-Dragon-Shade { +.Pet-Deer-Shade { background-image: url(spritesmith-main-12.png); background-position: -492px -700px; width: 81px; height: 99px; } -.Pet-Dragon-Skeleton { +.Pet-Deer-Skeleton { background-image: url(spritesmith-main-12.png); background-position: -574px -700px; width: 81px; height: 99px; } -.Pet-Dragon-Spooky { +.Pet-Deer-White { background-image: url(spritesmith-main-12.png); background-position: -656px -700px; width: 81px; height: 99px; } -.Pet-Dragon-White { +.Pet-Deer-Zombie { background-image: url(spritesmith-main-12.png); background-position: -738px -700px; width: 81px; height: 99px; } -.Pet-Dragon-Zombie { +.Pet-Dragon-Base { background-image: url(spritesmith-main-12.png); background-position: -820px 0px; width: 81px; height: 99px; } -.Pet-Egg-Base { +.Pet-Dragon-CottonCandyBlue { background-image: url(spritesmith-main-12.png); background-position: -820px -100px; width: 81px; height: 99px; } -.Pet-Egg-CottonCandyBlue { +.Pet-Dragon-CottonCandyPink { background-image: url(spritesmith-main-12.png); background-position: -820px -200px; width: 81px; height: 99px; } -.Pet-Egg-CottonCandyPink { +.Pet-Dragon-Desert { background-image: url(spritesmith-main-12.png); background-position: -820px -300px; width: 81px; height: 99px; } -.Pet-Egg-Desert { +.Pet-Dragon-Floral { background-image: url(spritesmith-main-12.png); background-position: -820px -400px; width: 81px; height: 99px; } -.Pet-Egg-Golden { +.Pet-Dragon-Golden { background-image: url(spritesmith-main-12.png); background-position: -820px -500px; width: 81px; height: 99px; } -.Pet-Egg-Red { +.Pet-Dragon-Hydra { background-image: url(spritesmith-main-12.png); background-position: -820px -600px; width: 81px; height: 99px; } -.Pet-Egg-Shade { +.Pet-Dragon-Peppermint { background-image: url(spritesmith-main-12.png); background-position: -820px -700px; width: 81px; height: 99px; } -.Pet-Egg-Skeleton { +.Pet-Dragon-Red { background-image: url(spritesmith-main-12.png); background-position: 0px -800px; width: 81px; height: 99px; } -.Pet-Egg-White { +.Pet-Dragon-Shade { background-image: url(spritesmith-main-12.png); background-position: -82px -800px; width: 81px; height: 99px; } -.Pet-Egg-Zombie { +.Pet-Dragon-Skeleton { background-image: url(spritesmith-main-12.png); background-position: -164px -800px; width: 81px; height: 99px; } -.Pet-Falcon-Base { +.Pet-Dragon-Spooky { background-image: url(spritesmith-main-12.png); background-position: -246px -800px; width: 81px; height: 99px; } -.Pet-Falcon-CottonCandyBlue { +.Pet-Dragon-White { background-image: url(spritesmith-main-12.png); background-position: -328px -800px; width: 81px; height: 99px; } -.Pet-Falcon-CottonCandyPink { +.Pet-Dragon-Zombie { background-image: url(spritesmith-main-12.png); background-position: -410px -800px; width: 81px; height: 99px; } -.Pet-Falcon-Desert { +.Pet-Egg-Base { background-image: url(spritesmith-main-12.png); background-position: -492px -800px; width: 81px; height: 99px; } -.Pet-Falcon-Golden { +.Pet-Egg-CottonCandyBlue { background-image: url(spritesmith-main-12.png); background-position: -574px -800px; width: 81px; height: 99px; } -.Pet-Falcon-Red { +.Pet-Egg-CottonCandyPink { background-image: url(spritesmith-main-12.png); background-position: -656px -800px; width: 81px; height: 99px; } -.Pet-Falcon-Shade { +.Pet-Egg-Desert { background-image: url(spritesmith-main-12.png); background-position: -738px -800px; width: 81px; height: 99px; } -.Pet-Falcon-Skeleton { +.Pet-Egg-Golden { background-image: url(spritesmith-main-12.png); background-position: -820px -800px; width: 81px; height: 99px; } -.Pet-Falcon-White { +.Pet-Egg-Red { background-image: url(spritesmith-main-12.png); background-position: -902px 0px; width: 81px; height: 99px; } -.Pet-Falcon-Zombie { +.Pet-Egg-Shade { background-image: url(spritesmith-main-12.png); background-position: -902px -100px; width: 81px; height: 99px; } -.Pet-FlyingPig-Base { +.Pet-Egg-Skeleton { background-image: url(spritesmith-main-12.png); background-position: -902px -200px; width: 81px; height: 99px; } -.Pet-FlyingPig-CottonCandyBlue { +.Pet-Egg-White { background-image: url(spritesmith-main-12.png); background-position: -902px -300px; width: 81px; height: 99px; } -.Pet-FlyingPig-CottonCandyPink { +.Pet-Egg-Zombie { background-image: url(spritesmith-main-12.png); background-position: -902px -400px; width: 81px; height: 99px; } -.Pet-FlyingPig-Desert { +.Pet-Falcon-Base { background-image: url(spritesmith-main-12.png); background-position: -902px -500px; width: 81px; height: 99px; } -.Pet-FlyingPig-Floral { +.Pet-Falcon-CottonCandyBlue { background-image: url(spritesmith-main-12.png); background-position: -902px -600px; width: 81px; height: 99px; } -.Pet-FlyingPig-Golden { +.Pet-Falcon-CottonCandyPink { background-image: url(spritesmith-main-12.png); background-position: -902px -700px; width: 81px; height: 99px; } -.Pet-FlyingPig-Peppermint { +.Pet-Falcon-Desert { background-image: url(spritesmith-main-12.png); background-position: -902px -800px; width: 81px; height: 99px; } -.Pet-FlyingPig-Red { +.Pet-Falcon-Golden { background-image: url(spritesmith-main-12.png); background-position: -984px 0px; width: 81px; height: 99px; } -.Pet-FlyingPig-Shade { +.Pet-Falcon-Red { background-image: url(spritesmith-main-12.png); background-position: -984px -100px; width: 81px; height: 99px; } -.Pet-FlyingPig-Skeleton { +.Pet-Falcon-Shade { background-image: url(spritesmith-main-12.png); background-position: -984px -200px; width: 81px; height: 99px; } -.Pet-FlyingPig-Spooky { +.Pet-Falcon-Skeleton { background-image: url(spritesmith-main-12.png); background-position: -984px -300px; width: 81px; height: 99px; } -.Pet-FlyingPig-White { +.Pet-Falcon-White { background-image: url(spritesmith-main-12.png); background-position: -984px -400px; width: 81px; height: 99px; } -.Pet-FlyingPig-Zombie { +.Pet-Falcon-Zombie { background-image: url(spritesmith-main-12.png); background-position: -984px -500px; width: 81px; height: 99px; } -.Pet-Fox-Base { +.Pet-FlyingPig-Base { background-image: url(spritesmith-main-12.png); background-position: -984px -600px; width: 81px; height: 99px; } -.Pet-Fox-CottonCandyBlue { +.Pet-FlyingPig-CottonCandyBlue { background-image: url(spritesmith-main-12.png); background-position: -984px -700px; width: 81px; height: 99px; } -.Pet-Fox-CottonCandyPink { +.Pet-FlyingPig-CottonCandyPink { background-image: url(spritesmith-main-12.png); background-position: -984px -800px; width: 81px; height: 99px; } -.Pet-Fox-Desert { +.Pet-FlyingPig-Desert { background-image: url(spritesmith-main-12.png); background-position: 0px -900px; width: 81px; height: 99px; } -.Pet-Fox-Floral { +.Pet-FlyingPig-Floral { background-image: url(spritesmith-main-12.png); background-position: -82px -900px; width: 81px; height: 99px; } -.Pet-Fox-Golden { +.Pet-FlyingPig-Golden { background-image: url(spritesmith-main-12.png); background-position: -164px -900px; width: 81px; height: 99px; } -.Pet-Fox-Peppermint { +.Pet-FlyingPig-Peppermint { background-image: url(spritesmith-main-12.png); background-position: -246px -900px; width: 81px; height: 99px; } -.Pet-Fox-Red { +.Pet-FlyingPig-Red { background-image: url(spritesmith-main-12.png); background-position: -328px -900px; width: 81px; height: 99px; } -.Pet-Fox-Shade { +.Pet-FlyingPig-Shade { background-image: url(spritesmith-main-12.png); background-position: -410px -900px; width: 81px; height: 99px; } -.Pet-Fox-Skeleton { +.Pet-FlyingPig-Skeleton { background-image: url(spritesmith-main-12.png); background-position: -492px -900px; width: 81px; height: 99px; } -.Pet-Fox-Spooky { +.Pet-FlyingPig-Spooky { background-image: url(spritesmith-main-12.png); background-position: -574px -900px; width: 81px; height: 99px; } -.Pet-Fox-White { +.Pet-FlyingPig-White { background-image: url(spritesmith-main-12.png); background-position: -656px -900px; width: 81px; height: 99px; } -.Pet-Fox-Zombie { +.Pet-FlyingPig-Zombie { background-image: url(spritesmith-main-12.png); background-position: -738px -900px; width: 81px; height: 99px; } -.Pet-Frog-Base { +.Pet-Fox-Base { background-image: url(spritesmith-main-12.png); background-position: -820px -900px; width: 81px; height: 99px; } -.Pet-Frog-CottonCandyBlue { +.Pet-Fox-CottonCandyBlue { background-image: url(spritesmith-main-12.png); background-position: -902px -900px; width: 81px; height: 99px; } -.Pet-Frog-CottonCandyPink { +.Pet-Fox-CottonCandyPink { background-image: url(spritesmith-main-12.png); background-position: -984px -900px; width: 81px; height: 99px; } -.Pet-Frog-Desert { +.Pet-Fox-Desert { background-image: url(spritesmith-main-12.png); background-position: -1066px 0px; width: 81px; height: 99px; } -.Pet-Frog-Golden { +.Pet-Fox-Floral { background-image: url(spritesmith-main-12.png); background-position: -1066px -100px; width: 81px; height: 99px; } -.Pet-Frog-Red { +.Pet-Fox-Golden { background-image: url(spritesmith-main-12.png); background-position: -1066px -200px; width: 81px; height: 99px; } -.Pet-Frog-Shade { +.Pet-Fox-Peppermint { background-image: url(spritesmith-main-12.png); background-position: -1066px -300px; width: 81px; height: 99px; } -.Pet-Frog-Skeleton { +.Pet-Fox-Red { background-image: url(spritesmith-main-12.png); background-position: -1066px -400px; width: 81px; height: 99px; } -.Pet-Frog-White { +.Pet-Fox-Shade { background-image: url(spritesmith-main-12.png); background-position: -1066px -500px; width: 81px; height: 99px; } -.Pet-Frog-Zombie { +.Pet-Fox-Skeleton { background-image: url(spritesmith-main-12.png); background-position: -1066px -600px; width: 81px; height: 99px; } -.Pet-Gryphon-Base { +.Pet-Fox-Spooky { background-image: url(spritesmith-main-12.png); background-position: -1066px -700px; width: 81px; height: 99px; } -.Pet-Gryphon-CottonCandyBlue { +.Pet-Fox-White { background-image: url(spritesmith-main-12.png); background-position: -1066px -800px; width: 81px; height: 99px; } -.Pet-Gryphon-CottonCandyPink { +.Pet-Fox-Zombie { background-image: url(spritesmith-main-12.png); background-position: -1066px -900px; width: 81px; height: 99px; } -.Pet-Gryphon-Desert { +.Pet-Frog-Base { background-image: url(spritesmith-main-12.png); background-position: 0px -1000px; width: 81px; height: 99px; } -.Pet-Gryphon-Golden { +.Pet-Frog-CottonCandyBlue { background-image: url(spritesmith-main-12.png); background-position: -82px -1000px; width: 81px; height: 99px; } -.Pet-Gryphon-Red { +.Pet-Frog-CottonCandyPink { background-image: url(spritesmith-main-12.png); background-position: -164px -1000px; width: 81px; height: 99px; } -.Pet-Gryphon-Shade { +.Pet-Frog-Desert { background-image: url(spritesmith-main-12.png); background-position: -246px -1000px; width: 81px; height: 99px; } -.Pet-Gryphon-Skeleton { +.Pet-Frog-Golden { background-image: url(spritesmith-main-12.png); background-position: -328px -1000px; width: 81px; height: 99px; } -.Pet-Gryphon-White { +.Pet-Frog-Red { background-image: url(spritesmith-main-12.png); background-position: -410px -1000px; width: 81px; height: 99px; } -.Pet-Gryphon-Zombie { +.Pet-Frog-Shade { background-image: url(spritesmith-main-12.png); background-position: -492px -1000px; width: 81px; height: 99px; } -.Pet-Hedgehog-Base { +.Pet-Frog-Skeleton { background-image: url(spritesmith-main-12.png); background-position: -574px -1000px; width: 81px; height: 99px; } -.Pet-Hedgehog-CottonCandyBlue { +.Pet-Frog-White { background-image: url(spritesmith-main-12.png); background-position: -656px -1000px; width: 81px; height: 99px; } -.Pet-Hedgehog-CottonCandyPink { +.Pet-Frog-Zombie { background-image: url(spritesmith-main-12.png); background-position: -738px -1000px; width: 81px; height: 99px; } -.Pet-Hedgehog-Desert { +.Pet-Gryphon-Base { background-image: url(spritesmith-main-12.png); background-position: -820px -1000px; width: 81px; height: 99px; } -.Pet-Hedgehog-Golden { +.Pet-Gryphon-CottonCandyBlue { background-image: url(spritesmith-main-12.png); background-position: -902px -1000px; width: 81px; height: 99px; } -.Pet-Hedgehog-Red { +.Pet-Gryphon-CottonCandyPink { background-image: url(spritesmith-main-12.png); background-position: -984px -1000px; width: 81px; height: 99px; } -.Pet-Hedgehog-Shade { +.Pet-Gryphon-Desert { background-image: url(spritesmith-main-12.png); background-position: -1066px -1000px; width: 81px; height: 99px; } -.Pet-Hedgehog-Skeleton { +.Pet-Gryphon-Golden { background-image: url(spritesmith-main-12.png); background-position: -1148px 0px; width: 81px; height: 99px; } -.Pet-Hedgehog-White { +.Pet-Gryphon-Red { background-image: url(spritesmith-main-12.png); background-position: -1148px -100px; width: 81px; height: 99px; } -.Pet-Hedgehog-Zombie { +.Pet-Gryphon-RoyalPurple { background-image: url(spritesmith-main-12.png); background-position: -1148px -200px; width: 81px; height: 99px; } -.Pet-Horse-Base { +.Pet-Gryphon-Shade { background-image: url(spritesmith-main-12.png); background-position: -1148px -300px; width: 81px; height: 99px; } -.Pet-Horse-CottonCandyBlue { +.Pet-Gryphon-Skeleton { background-image: url(spritesmith-main-12.png); background-position: -1148px -400px; width: 81px; height: 99px; } -.Pet-Horse-CottonCandyPink { +.Pet-Gryphon-White { background-image: url(spritesmith-main-12.png); background-position: -1148px -500px; width: 81px; height: 99px; } -.Pet-Horse-Desert { +.Pet-Gryphon-Zombie { background-image: url(spritesmith-main-12.png); background-position: -1148px -600px; width: 81px; height: 99px; } -.Pet-Horse-Golden { +.Pet-Hedgehog-Base { background-image: url(spritesmith-main-12.png); background-position: -1148px -700px; width: 81px; height: 99px; } -.Pet-Horse-Red { +.Pet-Hedgehog-CottonCandyBlue { background-image: url(spritesmith-main-12.png); background-position: -1148px -800px; width: 81px; height: 99px; } -.Pet-Horse-Shade { +.Pet-Hedgehog-CottonCandyPink { background-image: url(spritesmith-main-12.png); background-position: -1148px -900px; width: 81px; height: 99px; } -.Pet-Horse-Skeleton { +.Pet-Hedgehog-Desert { background-image: url(spritesmith-main-12.png); background-position: -1148px -1000px; width: 81px; height: 99px; } -.Pet-Horse-White { +.Pet-Hedgehog-Golden { background-image: url(spritesmith-main-12.png); background-position: 0px -1100px; width: 81px; height: 99px; } -.Pet-Horse-Zombie { +.Pet-Hedgehog-Red { background-image: url(spritesmith-main-12.png); background-position: 0px 0px; width: 81px; height: 99px; } -.Pet-JackOLantern-Base { +.Pet-Hedgehog-Shade { background-image: url(spritesmith-main-12.png); background-position: -164px -1100px; width: 81px; height: 99px; } -.Pet-Lion-Veteran { +.Pet-Hedgehog-Skeleton { background-image: url(spritesmith-main-12.png); background-position: -246px -1100px; width: 81px; height: 99px; } -.Pet-LionCub-Base { +.Pet-Hedgehog-White { background-image: url(spritesmith-main-12.png); background-position: -328px -1100px; width: 81px; height: 99px; } -.Pet-LionCub-CottonCandyBlue { +.Pet-Hedgehog-Zombie { background-image: url(spritesmith-main-12.png); background-position: -410px -1100px; width: 81px; height: 99px; } -.Pet-LionCub-CottonCandyPink { +.Pet-Horse-Base { background-image: url(spritesmith-main-12.png); background-position: -492px -1100px; width: 81px; height: 99px; } -.Pet-LionCub-Desert { +.Pet-Horse-CottonCandyBlue { background-image: url(spritesmith-main-12.png); background-position: -574px -1100px; width: 81px; height: 99px; } -.Pet-LionCub-Floral { +.Pet-Horse-CottonCandyPink { background-image: url(spritesmith-main-12.png); background-position: -656px -1100px; width: 81px; height: 99px; } -.Pet-LionCub-Golden { +.Pet-Horse-Desert { background-image: url(spritesmith-main-12.png); background-position: -738px -1100px; width: 81px; height: 99px; } -.Pet-LionCub-Peppermint { +.Pet-Horse-Golden { background-image: url(spritesmith-main-12.png); background-position: -820px -1100px; width: 81px; height: 99px; } -.Pet-LionCub-Red { +.Pet-Horse-Red { background-image: url(spritesmith-main-12.png); background-position: -902px -1100px; width: 81px; height: 99px; } -.Pet-LionCub-Shade { +.Pet-Horse-Shade { background-image: url(spritesmith-main-12.png); background-position: -984px -1100px; width: 81px; height: 99px; } -.Pet-LionCub-Skeleton { +.Pet-Horse-Skeleton { background-image: url(spritesmith-main-12.png); background-position: -1066px -1100px; width: 81px; height: 99px; } -.Pet-LionCub-Spooky { +.Pet-Horse-White { background-image: url(spritesmith-main-12.png); background-position: -1148px -1100px; width: 81px; height: 99px; } -.Pet-LionCub-White { +.Pet-Horse-Zombie { background-image: url(spritesmith-main-12.png); background-position: -1230px 0px; width: 81px; height: 99px; } -.Pet-LionCub-Zombie { +.Pet-JackOLantern-Base { background-image: url(spritesmith-main-12.png); background-position: -1230px -100px; width: 81px; height: 99px; } -.Pet-MagicalBee-Base { +.Pet-Lion-Veteran { background-image: url(spritesmith-main-12.png); background-position: -1230px -200px; width: 81px; height: 99px; } -.Pet-Mammoth-Base { +.Pet-LionCub-Base { background-image: url(spritesmith-main-12.png); background-position: -1230px -300px; width: 81px; height: 99px; } -.Pet-MantisShrimp-Base { +.Pet-LionCub-CottonCandyBlue { background-image: url(spritesmith-main-12.png); background-position: -1230px -400px; width: 81px; height: 99px; } -.Pet-Monkey-Base { +.Pet-LionCub-CottonCandyPink { background-image: url(spritesmith-main-12.png); background-position: -1230px -500px; width: 81px; height: 99px; } -.Pet-Monkey-CottonCandyBlue { +.Pet-LionCub-Desert { background-image: url(spritesmith-main-12.png); background-position: -1230px -600px; width: 81px; height: 99px; } -.Pet-Monkey-CottonCandyPink { +.Pet-LionCub-Floral { background-image: url(spritesmith-main-12.png); background-position: -1230px -700px; width: 81px; height: 99px; } -.Pet-Monkey-Desert { +.Pet-LionCub-Golden { background-image: url(spritesmith-main-12.png); background-position: -1230px -800px; width: 81px; height: 99px; } -.Pet-Monkey-Golden { +.Pet-LionCub-Peppermint { background-image: url(spritesmith-main-12.png); background-position: -1230px -900px; width: 81px; height: 99px; } -.Pet-Monkey-Red { +.Pet-LionCub-Red { background-image: url(spritesmith-main-12.png); background-position: -1230px -1000px; width: 81px; height: 99px; } -.Pet-Monkey-Shade { +.Pet-LionCub-Shade { background-image: url(spritesmith-main-12.png); background-position: -1230px -1100px; width: 81px; height: 99px; } -.Pet-Monkey-Skeleton { +.Pet-LionCub-Skeleton { background-image: url(spritesmith-main-12.png); background-position: 0px -1200px; width: 81px; height: 99px; } -.Pet-Monkey-White { +.Pet-LionCub-Spooky { background-image: url(spritesmith-main-12.png); background-position: -82px -1200px; width: 81px; height: 99px; } -.Pet-Monkey-Zombie { +.Pet-LionCub-White { background-image: url(spritesmith-main-12.png); background-position: -164px -1200px; width: 81px; height: 99px; } -.Pet-Octopus-Base { +.Pet-LionCub-Zombie { background-image: url(spritesmith-main-12.png); background-position: -246px -1200px; width: 81px; height: 99px; } -.Pet-Octopus-CottonCandyBlue { +.Pet-MagicalBee-Base { background-image: url(spritesmith-main-12.png); background-position: -328px -1200px; width: 81px; height: 99px; } -.Pet-Octopus-CottonCandyPink { +.Pet-Mammoth-Base { background-image: url(spritesmith-main-12.png); background-position: -410px -1200px; width: 81px; height: 99px; } -.Pet-Octopus-Desert { +.Pet-MantisShrimp-Base { background-image: url(spritesmith-main-12.png); background-position: -492px -1200px; width: 81px; height: 99px; } -.Pet-Octopus-Golden { +.Pet-Monkey-Base { background-image: url(spritesmith-main-12.png); background-position: -574px -1200px; width: 81px; height: 99px; } -.Pet-Octopus-Red { +.Pet-Monkey-CottonCandyBlue { background-image: url(spritesmith-main-12.png); background-position: -656px -1200px; width: 81px; height: 99px; } -.Pet-Octopus-Shade { +.Pet-Monkey-CottonCandyPink { background-image: url(spritesmith-main-12.png); background-position: -738px -1200px; width: 81px; height: 99px; } -.Pet-Octopus-Skeleton { +.Pet-Monkey-Desert { background-image: url(spritesmith-main-12.png); background-position: -820px -1200px; width: 81px; height: 99px; } -.Pet-Octopus-White { +.Pet-Monkey-Golden { background-image: url(spritesmith-main-12.png); background-position: -902px -1200px; width: 81px; height: 99px; } -.Pet-Octopus-Zombie { +.Pet-Monkey-Red { background-image: url(spritesmith-main-12.png); background-position: -984px -1200px; width: 81px; height: 99px; } -.Pet-Owl-Base { +.Pet-Monkey-Shade { background-image: url(spritesmith-main-12.png); background-position: -1066px -1200px; width: 81px; height: 99px; } -.Pet-Owl-CottonCandyBlue { +.Pet-Monkey-Skeleton { background-image: url(spritesmith-main-12.png); background-position: -1148px -1200px; width: 81px; height: 99px; } -.Pet-Owl-CottonCandyPink { +.Pet-Monkey-White { background-image: url(spritesmith-main-12.png); background-position: -1230px -1200px; width: 81px; height: 99px; } -.Pet-Owl-Desert { +.Pet-Monkey-Zombie { background-image: url(spritesmith-main-12.png); background-position: -1312px 0px; width: 81px; height: 99px; } -.Pet-Owl-Golden { +.Pet-Octopus-Base { background-image: url(spritesmith-main-12.png); background-position: -1312px -100px; width: 81px; height: 99px; } -.Pet-Owl-Red { +.Pet-Octopus-CottonCandyBlue { background-image: url(spritesmith-main-12.png); background-position: -1312px -200px; width: 81px; height: 99px; } -.Pet-Owl-Shade { +.Pet-Octopus-CottonCandyPink { background-image: url(spritesmith-main-12.png); background-position: -1312px -300px; width: 81px; height: 99px; } -.Pet-Owl-Skeleton { +.Pet-Octopus-Desert { background-image: url(spritesmith-main-12.png); background-position: -1312px -400px; width: 81px; height: 99px; } -.Pet-Owl-White { +.Pet-Octopus-Golden { background-image: url(spritesmith-main-12.png); background-position: -1312px -500px; width: 81px; height: 99px; } -.Pet-Owl-Zombie { +.Pet-Octopus-Red { background-image: url(spritesmith-main-12.png); background-position: -1312px -600px; width: 81px; height: 99px; } -.Pet-PandaCub-Base { +.Pet-Octopus-Shade { background-image: url(spritesmith-main-12.png); background-position: -1312px -700px; width: 81px; height: 99px; } -.Pet-PandaCub-CottonCandyBlue { +.Pet-Octopus-Skeleton { background-image: url(spritesmith-main-12.png); background-position: -1312px -800px; width: 81px; height: 99px; } -.Pet-PandaCub-CottonCandyPink { +.Pet-Octopus-White { background-image: url(spritesmith-main-12.png); background-position: -1312px -900px; width: 81px; height: 99px; } -.Pet-PandaCub-Desert { +.Pet-Octopus-Zombie { background-image: url(spritesmith-main-12.png); background-position: -1312px -1000px; width: 81px; height: 99px; } -.Pet-PandaCub-Floral { +.Pet-Owl-Base { background-image: url(spritesmith-main-12.png); background-position: -1312px -1100px; width: 81px; height: 99px; } -.Pet-PandaCub-Golden { +.Pet-Owl-CottonCandyBlue { background-image: url(spritesmith-main-12.png); background-position: -1312px -1200px; width: 81px; height: 99px; } -.Pet-PandaCub-Peppermint { +.Pet-Owl-CottonCandyPink { background-image: url(spritesmith-main-12.png); background-position: -1394px 0px; width: 81px; height: 99px; } -.Pet-PandaCub-Red { +.Pet-Owl-Desert { background-image: url(spritesmith-main-12.png); background-position: -1394px -100px; width: 81px; height: 99px; } -.Pet-PandaCub-Shade { +.Pet-Owl-Golden { background-image: url(spritesmith-main-12.png); background-position: -1394px -200px; width: 81px; height: 99px; } -.Pet-PandaCub-Skeleton { +.Pet-Owl-Red { background-image: url(spritesmith-main-12.png); background-position: -1394px -300px; width: 81px; height: 99px; } -.Pet-PandaCub-Spooky { +.Pet-Owl-Shade { background-image: url(spritesmith-main-12.png); background-position: -1394px -400px; width: 81px; height: 99px; } -.Pet-PandaCub-White { +.Pet-Owl-Skeleton { background-image: url(spritesmith-main-12.png); background-position: -1394px -500px; width: 81px; height: 99px; } -.Pet-PandaCub-Zombie { +.Pet-Owl-White { background-image: url(spritesmith-main-12.png); background-position: -1394px -600px; width: 81px; height: 99px; } -.Pet-Parrot-Base { +.Pet-Owl-Zombie { background-image: url(spritesmith-main-12.png); background-position: -1394px -700px; width: 81px; height: 99px; } -.Pet-Parrot-CottonCandyBlue { +.Pet-PandaCub-Base { background-image: url(spritesmith-main-12.png); background-position: -1394px -800px; width: 81px; height: 99px; } -.Pet-Parrot-CottonCandyPink { +.Pet-PandaCub-CottonCandyBlue { background-image: url(spritesmith-main-12.png); background-position: -1394px -900px; width: 81px; height: 99px; } -.Pet-Parrot-Desert { +.Pet-PandaCub-CottonCandyPink { background-image: url(spritesmith-main-12.png); background-position: -1394px -1000px; width: 81px; height: 99px; } -.Pet-Parrot-Golden { +.Pet-PandaCub-Desert { background-image: url(spritesmith-main-12.png); background-position: -1394px -1100px; width: 81px; height: 99px; } -.Pet-Parrot-Red { +.Pet-PandaCub-Floral { background-image: url(spritesmith-main-12.png); background-position: -1394px -1200px; width: 81px; height: 99px; } -.Pet-Parrot-Shade { +.Pet-PandaCub-Golden { background-image: url(spritesmith-main-12.png); background-position: 0px -1300px; width: 81px; height: 99px; } -.Pet-Parrot-Skeleton { +.Pet-PandaCub-Peppermint { background-image: url(spritesmith-main-12.png); background-position: -82px -1300px; width: 81px; height: 99px; } -.Pet-Parrot-White { +.Pet-PandaCub-Red { background-image: url(spritesmith-main-12.png); background-position: -164px -1300px; width: 81px; height: 99px; } -.Pet-Parrot-Zombie { +.Pet-PandaCub-Shade { background-image: url(spritesmith-main-12.png); background-position: -246px -1300px; width: 81px; height: 99px; } -.Pet-Penguin-Base { +.Pet-PandaCub-Skeleton { background-image: url(spritesmith-main-12.png); background-position: -328px -1300px; width: 81px; height: 99px; } -.Pet-Penguin-CottonCandyBlue { +.Pet-PandaCub-Spooky { background-image: url(spritesmith-main-12.png); background-position: -410px -1300px; width: 81px; height: 99px; } -.Pet-Penguin-CottonCandyPink { +.Pet-PandaCub-White { background-image: url(spritesmith-main-12.png); background-position: -492px -1300px; width: 81px; height: 99px; } -.Pet-Penguin-Desert { +.Pet-PandaCub-Zombie { background-image: url(spritesmith-main-12.png); background-position: -574px -1300px; width: 81px; height: 99px; } -.Pet-Penguin-Golden { +.Pet-Parrot-Base { background-image: url(spritesmith-main-12.png); background-position: -656px -1300px; width: 81px; height: 99px; } -.Pet-Penguin-Red { +.Pet-Parrot-CottonCandyBlue { background-image: url(spritesmith-main-12.png); background-position: -738px -1300px; width: 81px; height: 99px; } -.Pet-Penguin-Shade { +.Pet-Parrot-CottonCandyPink { background-image: url(spritesmith-main-12.png); background-position: -820px -1300px; width: 81px; height: 99px; } -.Pet-Penguin-Skeleton { +.Pet-Parrot-Desert { background-image: url(spritesmith-main-12.png); background-position: -902px -1300px; width: 81px; height: 99px; } -.Pet-Penguin-White { +.Pet-Parrot-Golden { background-image: url(spritesmith-main-12.png); background-position: -984px -1300px; width: 81px; height: 99px; } -.Pet-Penguin-Zombie { +.Pet-Parrot-Red { background-image: url(spritesmith-main-12.png); background-position: -1066px -1300px; width: 81px; height: 99px; } -.Pet-Phoenix-Base { +.Pet-Parrot-Shade { background-image: url(spritesmith-main-12.png); background-position: -1148px -1300px; width: 81px; height: 99px; } -.Pet-Rat-Base { +.Pet-Parrot-Skeleton { background-image: url(spritesmith-main-12.png); background-position: -1230px -1300px; width: 81px; height: 99px; } -.Pet-Rat-CottonCandyBlue { +.Pet-Parrot-White { background-image: url(spritesmith-main-12.png); background-position: -1312px -1300px; width: 81px; height: 99px; } -.Pet-Rat-CottonCandyPink { +.Pet-Parrot-Zombie { background-image: url(spritesmith-main-12.png); background-position: -1394px -1300px; width: 81px; height: 99px; } -.Pet-Rat-Desert { +.Pet-Penguin-Base { background-image: url(spritesmith-main-12.png); background-position: -1476px 0px; width: 81px; height: 99px; } -.Pet-Rat-Golden { +.Pet-Penguin-CottonCandyBlue { background-image: url(spritesmith-main-12.png); background-position: -1476px -100px; width: 81px; height: 99px; } -.Pet-Rat-Red { +.Pet-Penguin-CottonCandyPink { background-image: url(spritesmith-main-12.png); background-position: -1476px -200px; width: 81px; height: 99px; } -.Pet-Rat-Shade { +.Pet-Penguin-Desert { background-image: url(spritesmith-main-12.png); background-position: -1476px -300px; width: 81px; height: 99px; } -.Pet-Rat-Skeleton { +.Pet-Penguin-Golden { background-image: url(spritesmith-main-12.png); background-position: -1476px -400px; width: 81px; height: 99px; } -.Pet-Rat-White { +.Pet-Penguin-Red { background-image: url(spritesmith-main-12.png); background-position: -1476px -500px; width: 81px; height: 99px; } -.Pet-Rat-Zombie { +.Pet-Penguin-Shade { background-image: url(spritesmith-main-12.png); background-position: -1476px -600px; width: 81px; height: 99px; } -.Pet-Rock-Base { +.Pet-Penguin-Skeleton { background-image: url(spritesmith-main-12.png); background-position: -1476px -700px; width: 81px; height: 99px; } -.Pet-Rock-CottonCandyBlue { +.Pet-Penguin-White { background-image: url(spritesmith-main-12.png); background-position: -1476px -800px; width: 81px; height: 99px; } -.Pet-Rock-CottonCandyPink { +.Pet-Penguin-Zombie { background-image: url(spritesmith-main-12.png); background-position: -1476px -900px; width: 81px; height: 99px; } -.Pet-Rock-Desert { +.Pet-Phoenix-Base { background-image: url(spritesmith-main-12.png); background-position: -1476px -1000px; width: 81px; height: 99px; } -.Pet-Rock-Golden { +.Pet-Rat-Base { background-image: url(spritesmith-main-12.png); background-position: -1476px -1100px; width: 81px; height: 99px; } -.Pet-Rock-Red { +.Pet-Rat-CottonCandyBlue { background-image: url(spritesmith-main-12.png); background-position: -1476px -1200px; width: 81px; height: 99px; } -.Pet-Rock-Shade { +.Pet-Rat-CottonCandyPink { background-image: url(spritesmith-main-12.png); background-position: -1476px -1300px; width: 81px; height: 99px; } -.Pet-Rock-Skeleton { +.Pet-Rat-Desert { background-image: url(spritesmith-main-12.png); background-position: 0px -1400px; width: 81px; height: 99px; } -.Pet-Rock-White { +.Pet-Rat-Golden { background-image: url(spritesmith-main-12.png); background-position: -82px -1400px; width: 81px; height: 99px; } -.Pet-Rock-Zombie { +.Pet-Rat-Red { background-image: url(spritesmith-main-12.png); background-position: -164px -1400px; width: 81px; height: 99px; } -.Pet-Rooster-Base { +.Pet-Rat-Shade { background-image: url(spritesmith-main-12.png); background-position: -246px -1400px; width: 81px; height: 99px; } -.Pet-Rooster-CottonCandyBlue { +.Pet-Rat-Skeleton { background-image: url(spritesmith-main-12.png); background-position: -328px -1400px; width: 81px; height: 99px; } -.Pet-Rooster-CottonCandyPink { +.Pet-Rat-White { background-image: url(spritesmith-main-12.png); background-position: -410px -1400px; width: 81px; height: 99px; } -.Pet-Rooster-Desert { +.Pet-Rat-Zombie { background-image: url(spritesmith-main-12.png); background-position: -492px -1400px; width: 81px; height: 99px; } -.Pet-Rooster-Golden { +.Pet-Rock-Base { background-image: url(spritesmith-main-12.png); background-position: -574px -1400px; width: 81px; height: 99px; } -.Pet-Rooster-Red { +.Pet-Rock-CottonCandyBlue { background-image: url(spritesmith-main-12.png); background-position: -656px -1400px; width: 81px; height: 99px; } -.Pet-Rooster-Shade { +.Pet-Rock-CottonCandyPink { background-image: url(spritesmith-main-12.png); background-position: -738px -1400px; width: 81px; height: 99px; } -.Pet-Rooster-Skeleton { +.Pet-Rock-Desert { background-image: url(spritesmith-main-12.png); background-position: -820px -1400px; width: 81px; height: 99px; } -.Pet-Rooster-White { +.Pet-Rock-Golden { background-image: url(spritesmith-main-12.png); background-position: -902px -1400px; width: 81px; height: 99px; } -.Pet-Rooster-Zombie { +.Pet-Rock-Red { background-image: url(spritesmith-main-12.png); background-position: -984px -1400px; width: 81px; height: 99px; } -.Pet-Sabretooth-Base { +.Pet-Rock-Shade { background-image: url(spritesmith-main-12.png); background-position: -1066px -1400px; width: 81px; height: 99px; } -.Pet-Sabretooth-CottonCandyBlue { +.Pet-Rock-Skeleton { background-image: url(spritesmith-main-12.png); background-position: -1148px -1400px; width: 81px; height: 99px; } -.Pet-Sabretooth-CottonCandyPink { +.Pet-Rock-White { background-image: url(spritesmith-main-12.png); background-position: -1230px -1400px; width: 81px; height: 99px; } -.Pet-Sabretooth-Desert { +.Pet-Rock-Zombie { background-image: url(spritesmith-main-12.png); background-position: -1312px -1400px; width: 81px; height: 99px; } -.Pet-Sabretooth-Golden { +.Pet-Rooster-Base { background-image: url(spritesmith-main-12.png); background-position: -1394px -1400px; width: 81px; height: 99px; } -.Pet-Sabretooth-Red { +.Pet-Rooster-CottonCandyBlue { background-image: url(spritesmith-main-12.png); background-position: -1476px -1400px; width: 81px; height: 99px; } -.Pet-Sabretooth-Shade { +.Pet-Rooster-CottonCandyPink { background-image: url(spritesmith-main-12.png); background-position: -1558px 0px; width: 81px; height: 99px; } -.Pet-Sabretooth-Skeleton { +.Pet-Rooster-Desert { background-image: url(spritesmith-main-12.png); background-position: -1558px -100px; width: 81px; height: 99px; } -.Pet-Sabretooth-White { +.Pet-Rooster-Golden { background-image: url(spritesmith-main-12.png); background-position: -1558px -200px; width: 81px; height: 99px; } -.Pet-Sabretooth-Zombie { +.Pet-Rooster-Red { background-image: url(spritesmith-main-12.png); background-position: -1558px -300px; width: 81px; height: 99px; } -.Pet-Seahorse-Base { +.Pet-Rooster-Shade { background-image: url(spritesmith-main-12.png); background-position: -1558px -400px; width: 81px; height: 99px; } -.Pet-Seahorse-CottonCandyBlue { +.Pet-Rooster-Skeleton { background-image: url(spritesmith-main-12.png); background-position: -1558px -500px; width: 81px; height: 99px; } -.Pet-Seahorse-CottonCandyPink { +.Pet-Rooster-White { background-image: url(spritesmith-main-12.png); background-position: -1558px -600px; width: 81px; height: 99px; } -.Pet-Seahorse-Desert { +.Pet-Rooster-Zombie { background-image: url(spritesmith-main-12.png); background-position: -1558px -700px; width: 81px; height: 99px; } -.Pet-Seahorse-Golden { +.Pet-Sabretooth-Base { background-image: url(spritesmith-main-12.png); background-position: -1558px -800px; width: 81px; height: 99px; } -.Pet-Seahorse-Red { +.Pet-Sabretooth-CottonCandyBlue { background-image: url(spritesmith-main-12.png); background-position: -1558px -900px; width: 81px; height: 99px; } -.Pet-Seahorse-Shade { +.Pet-Sabretooth-CottonCandyPink { background-image: url(spritesmith-main-12.png); background-position: -1558px -1000px; width: 81px; height: 99px; } -.Pet-Seahorse-Skeleton { +.Pet-Sabretooth-Desert { background-image: url(spritesmith-main-12.png); background-position: -1558px -1100px; width: 81px; height: 99px; } -.Pet-Seahorse-White { +.Pet-Sabretooth-Golden { background-image: url(spritesmith-main-12.png); background-position: -1558px -1200px; width: 81px; height: 99px; } -.Pet-Seahorse-Zombie { +.Pet-Sabretooth-Red { background-image: url(spritesmith-main-12.png); background-position: -1558px -1300px; width: 81px; height: 99px; } -.Pet-Sheep-Base { +.Pet-Sabretooth-Shade { background-image: url(spritesmith-main-12.png); background-position: -1558px -1400px; width: 81px; height: 99px; } -.Pet-Sheep-CottonCandyBlue { +.Pet-Sabretooth-Skeleton { background-image: url(spritesmith-main-12.png); background-position: 0px -1500px; width: 81px; height: 99px; } -.Pet-Sheep-CottonCandyPink { +.Pet-Sabretooth-White { background-image: url(spritesmith-main-12.png); background-position: -82px -1500px; width: 81px; height: 99px; } -.Pet-Sheep-Desert { +.Pet-Sabretooth-Zombie { background-image: url(spritesmith-main-12.png); background-position: -164px -1500px; width: 81px; height: 99px; } -.Pet-Sheep-Golden { +.Pet-Seahorse-Base { background-image: url(spritesmith-main-12.png); background-position: -246px -1500px; width: 81px; height: 99px; } -.Pet-Sheep-Red { +.Pet-Seahorse-CottonCandyBlue { background-image: url(spritesmith-main-12.png); background-position: -328px -1500px; width: 81px; height: 99px; } -.Pet-Sheep-Shade { +.Pet-Seahorse-CottonCandyPink { background-image: url(spritesmith-main-12.png); background-position: -410px -1500px; width: 81px; height: 99px; } -.Pet-Sheep-Skeleton { +.Pet-Seahorse-Desert { background-image: url(spritesmith-main-12.png); background-position: -492px -1500px; width: 81px; height: 99px; } -.Pet-Sheep-White { +.Pet-Seahorse-Golden { background-image: url(spritesmith-main-12.png); background-position: -574px -1500px; width: 81px; height: 99px; } -.Pet-Sheep-Zombie { +.Pet-Seahorse-Red { background-image: url(spritesmith-main-12.png); background-position: -656px -1500px; width: 81px; height: 99px; } -.Pet-Slime-Base { +.Pet-Seahorse-Shade { background-image: url(spritesmith-main-12.png); background-position: -738px -1500px; width: 81px; height: 99px; } -.Pet-Slime-CottonCandyBlue { +.Pet-Seahorse-Skeleton { background-image: url(spritesmith-main-12.png); background-position: -820px -1500px; width: 81px; height: 99px; } -.Pet-Slime-CottonCandyPink { +.Pet-Seahorse-White { background-image: url(spritesmith-main-12.png); background-position: -902px -1500px; width: 81px; height: 99px; } -.Pet-Slime-Desert { +.Pet-Seahorse-Zombie { background-image: url(spritesmith-main-12.png); background-position: -984px -1500px; width: 81px; height: 99px; } -.Pet-Slime-Golden { +.Pet-Sheep-Base { background-image: url(spritesmith-main-12.png); background-position: -1066px -1500px; width: 81px; height: 99px; } -.Pet-Slime-Red { +.Pet-Sheep-CottonCandyBlue { background-image: url(spritesmith-main-12.png); background-position: -1148px -1500px; width: 81px; height: 99px; } -.Pet-Slime-Shade { +.Pet-Sheep-CottonCandyPink { background-image: url(spritesmith-main-12.png); background-position: -1230px -1500px; width: 81px; height: 99px; } -.Pet-Slime-Skeleton { +.Pet-Sheep-Desert { background-image: url(spritesmith-main-12.png); background-position: -1312px -1500px; width: 81px; height: 99px; } -.Pet-Slime-White { +.Pet-Sheep-Golden { background-image: url(spritesmith-main-12.png); background-position: -1394px -1500px; width: 81px; height: 99px; } -.Pet-Slime-Zombie { +.Pet-Sheep-Red { background-image: url(spritesmith-main-12.png); background-position: -1476px -1500px; width: 81px; height: 99px; } -.Pet-Snail-Base { +.Pet-Sheep-Shade { background-image: url(spritesmith-main-12.png); background-position: -1558px -1500px; width: 81px; height: 99px; } -.Pet-Snail-CottonCandyBlue { +.Pet-Sheep-Skeleton { background-image: url(spritesmith-main-12.png); background-position: -1640px 0px; width: 81px; height: 99px; } -.Pet-Snail-CottonCandyPink { +.Pet-Sheep-White { background-image: url(spritesmith-main-12.png); background-position: -1640px -100px; width: 81px; height: 99px; } -.Pet-Snail-Desert { +.Pet-Sheep-Zombie { background-image: url(spritesmith-main-12.png); background-position: -1640px -200px; width: 81px; height: 99px; } -.Pet-Snail-Golden { +.Pet-Slime-Base { background-image: url(spritesmith-main-12.png); background-position: -1640px -300px; width: 81px; height: 99px; } -.Pet-Snail-Red { +.Pet-Slime-CottonCandyBlue { background-image: url(spritesmith-main-12.png); background-position: -1640px -400px; width: 81px; height: 99px; } -.Pet-Snail-Shade { +.Pet-Slime-CottonCandyPink { background-image: url(spritesmith-main-12.png); background-position: -1640px -500px; width: 81px; height: 99px; } -.Pet-Snail-Skeleton { +.Pet-Slime-Desert { background-image: url(spritesmith-main-12.png); background-position: -1640px -600px; width: 81px; height: 99px; } -.Pet-Snail-White { +.Pet-Slime-Golden { background-image: url(spritesmith-main-12.png); background-position: -1640px -700px; width: 81px; height: 99px; } -.Pet-Snail-Zombie { +.Pet-Slime-Red { background-image: url(spritesmith-main-12.png); background-position: -1640px -800px; width: 81px; height: 99px; } -.Pet-Snake-Base { +.Pet-Slime-Shade { background-image: url(spritesmith-main-12.png); background-position: -1640px -900px; width: 81px; height: 99px; } -.Pet-Snake-CottonCandyBlue { +.Pet-Slime-Skeleton { background-image: url(spritesmith-main-12.png); background-position: -1640px -1000px; width: 81px; height: 99px; } -.Pet-Snake-CottonCandyPink { +.Pet-Slime-White { background-image: url(spritesmith-main-12.png); background-position: -1640px -1100px; width: 81px; diff --git a/common/dist/sprites/spritesmith-main-12.png b/common/dist/sprites/spritesmith-main-12.png index bf66027f8c..5b4acc4ecb 100644 Binary files a/common/dist/sprites/spritesmith-main-12.png and b/common/dist/sprites/spritesmith-main-12.png differ diff --git a/common/dist/sprites/spritesmith-main-13.css b/common/dist/sprites/spritesmith-main-13.css index 1acfc4e03f..30f96e2a13 100644 --- a/common/dist/sprites/spritesmith-main-13.css +++ b/common/dist/sprites/spritesmith-main-13.css @@ -1,660 +1,744 @@ -.Pet-Snake-Desert { +.Pet-Slime-Zombie { background-image: url(spritesmith-main-13.png); background-position: -82px 0px; width: 81px; height: 99px; } -.Pet-Snake-Golden { - background-image: url(spritesmith-main-13.png); - background-position: -82px -600px; - width: 81px; - height: 99px; -} -.Pet-Snake-Red { - background-image: url(spritesmith-main-13.png); - background-position: -164px 0px; - width: 81px; - height: 99px; -} -.Pet-Snake-Shade { - background-image: url(spritesmith-main-13.png); - background-position: 0px -100px; - width: 81px; - height: 99px; -} -.Pet-Snake-Skeleton { - background-image: url(spritesmith-main-13.png); - background-position: -82px -100px; - width: 81px; - height: 99px; -} -.Pet-Snake-White { - background-image: url(spritesmith-main-13.png); - background-position: -164px -100px; - width: 81px; - height: 99px; -} -.Pet-Snake-Zombie { - background-image: url(spritesmith-main-13.png); - background-position: -246px 0px; - width: 81px; - height: 99px; -} -.Pet-Spider-Base { - background-image: url(spritesmith-main-13.png); - background-position: -246px -100px; - width: 81px; - height: 99px; -} -.Pet-Spider-CottonCandyBlue { - background-image: url(spritesmith-main-13.png); - background-position: 0px -200px; - width: 81px; - height: 99px; -} -.Pet-Spider-CottonCandyPink { - background-image: url(spritesmith-main-13.png); - background-position: -82px -200px; - width: 81px; - height: 99px; -} -.Pet-Spider-Desert { - background-image: url(spritesmith-main-13.png); - background-position: -164px -200px; - width: 81px; - height: 99px; -} -.Pet-Spider-Golden { - background-image: url(spritesmith-main-13.png); - background-position: -246px -200px; - width: 81px; - height: 99px; -} -.Pet-Spider-Red { - background-image: url(spritesmith-main-13.png); - background-position: -328px 0px; - width: 81px; - height: 99px; -} -.Pet-Spider-Shade { - background-image: url(spritesmith-main-13.png); - background-position: -328px -100px; - width: 81px; - height: 99px; -} -.Pet-Spider-Skeleton { - background-image: url(spritesmith-main-13.png); - background-position: -328px -200px; - width: 81px; - height: 99px; -} -.Pet-Spider-White { - background-image: url(spritesmith-main-13.png); - background-position: 0px -300px; - width: 81px; - height: 99px; -} -.Pet-Spider-Zombie { - background-image: url(spritesmith-main-13.png); - background-position: -82px -300px; - width: 81px; - height: 99px; -} -.Pet-TRex-Base { - background-image: url(spritesmith-main-13.png); - background-position: -82px -500px; - width: 81px; - height: 99px; -} -.Pet-TRex-CottonCandyBlue { - background-image: url(spritesmith-main-13.png); - background-position: -164px -500px; - width: 81px; - height: 99px; -} -.Pet-TRex-CottonCandyPink { - background-image: url(spritesmith-main-13.png); - background-position: -246px -500px; - width: 81px; - height: 99px; -} -.Pet-TRex-Desert { - background-image: url(spritesmith-main-13.png); - background-position: -328px -500px; - width: 81px; - height: 99px; -} -.Pet-TRex-Golden { - background-image: url(spritesmith-main-13.png); - background-position: -410px -500px; - width: 81px; - height: 99px; -} -.Pet-TRex-Red { - background-image: url(spritesmith-main-13.png); - background-position: -492px -500px; - width: 81px; - height: 99px; -} -.Pet-TRex-Shade { - background-image: url(spritesmith-main-13.png); - background-position: -574px -500px; - width: 81px; - height: 99px; -} -.Pet-TRex-Skeleton { - background-image: url(spritesmith-main-13.png); - background-position: -656px 0px; - width: 81px; - height: 99px; -} -.Pet-TRex-White { - background-image: url(spritesmith-main-13.png); - background-position: -656px -100px; - width: 81px; - height: 99px; -} -.Pet-TRex-Zombie { - background-image: url(spritesmith-main-13.png); - background-position: -656px -200px; - width: 81px; - height: 99px; -} -.Pet-Tiger-Veteran { - background-image: url(spritesmith-main-13.png); - background-position: -164px -300px; - width: 81px; - height: 99px; -} -.Pet-TigerCub-Base { - background-image: url(spritesmith-main-13.png); - background-position: -246px -300px; - width: 81px; - height: 99px; -} -.Pet-TigerCub-CottonCandyBlue { - background-image: url(spritesmith-main-13.png); - background-position: -328px -300px; - width: 81px; - height: 99px; -} -.Pet-TigerCub-CottonCandyPink { - background-image: url(spritesmith-main-13.png); - background-position: -410px 0px; - width: 81px; - height: 99px; -} -.Pet-TigerCub-Desert { - background-image: url(spritesmith-main-13.png); - background-position: -410px -100px; - width: 81px; - height: 99px; -} -.Pet-TigerCub-Floral { - background-image: url(spritesmith-main-13.png); - background-position: -410px -200px; - width: 81px; - height: 99px; -} -.Pet-TigerCub-Golden { - background-image: url(spritesmith-main-13.png); - background-position: -410px -300px; - width: 81px; - height: 99px; -} -.Pet-TigerCub-Peppermint { - background-image: url(spritesmith-main-13.png); - background-position: -492px 0px; - width: 81px; - height: 99px; -} -.Pet-TigerCub-Red { - background-image: url(spritesmith-main-13.png); - background-position: -492px -100px; - width: 81px; - height: 99px; -} -.Pet-TigerCub-Shade { - background-image: url(spritesmith-main-13.png); - background-position: -492px -200px; - width: 81px; - height: 99px; -} -.Pet-TigerCub-Skeleton { - background-image: url(spritesmith-main-13.png); - background-position: -492px -300px; - width: 81px; - height: 99px; -} -.Pet-TigerCub-Spooky { - background-image: url(spritesmith-main-13.png); - background-position: 0px -400px; - width: 81px; - height: 99px; -} -.Pet-TigerCub-White { - background-image: url(spritesmith-main-13.png); - background-position: -82px -400px; - width: 81px; - height: 99px; -} -.Pet-TigerCub-Zombie { - background-image: url(spritesmith-main-13.png); - background-position: -164px -400px; - width: 81px; - height: 99px; -} -.Pet-Treeling-Base { - background-image: url(spritesmith-main-13.png); - background-position: -246px -400px; - width: 81px; - height: 99px; -} -.Pet-Treeling-CottonCandyBlue { - background-image: url(spritesmith-main-13.png); - background-position: -328px -400px; - width: 81px; - height: 99px; -} -.Pet-Treeling-CottonCandyPink { - background-image: url(spritesmith-main-13.png); - background-position: -410px -400px; - width: 81px; - height: 99px; -} -.Pet-Treeling-Desert { - background-image: url(spritesmith-main-13.png); - background-position: -492px -400px; - width: 81px; - height: 99px; -} -.Pet-Treeling-Golden { - background-image: url(spritesmith-main-13.png); - background-position: -574px 0px; - width: 81px; - height: 99px; -} -.Pet-Treeling-Red { - background-image: url(spritesmith-main-13.png); - background-position: -574px -100px; - width: 81px; - height: 99px; -} -.Pet-Treeling-Shade { - background-image: url(spritesmith-main-13.png); - background-position: -574px -200px; - width: 81px; - height: 99px; -} -.Pet-Treeling-Skeleton { - background-image: url(spritesmith-main-13.png); - background-position: -574px -300px; - width: 81px; - height: 99px; -} -.Pet-Treeling-White { - background-image: url(spritesmith-main-13.png); - background-position: -574px -400px; - width: 81px; - height: 99px; -} -.Pet-Treeling-Zombie { - background-image: url(spritesmith-main-13.png); - background-position: 0px -500px; - width: 81px; - height: 99px; -} -.Pet-Turkey-Base { - background-image: url(spritesmith-main-13.png); - background-position: -656px -300px; - width: 81px; - height: 99px; -} -.Pet-Turkey-Gilded { - background-image: url(spritesmith-main-13.png); - background-position: -656px -400px; - width: 81px; - height: 99px; -} -.Pet-Turtle-Base { - background-image: url(spritesmith-main-13.png); - background-position: -656px -500px; - width: 81px; - height: 99px; -} -.Pet-Turtle-CottonCandyBlue { - background-image: url(spritesmith-main-13.png); - background-position: 0px -600px; - width: 81px; - height: 99px; -} -.Pet-Turtle-CottonCandyPink { - background-image: url(spritesmith-main-13.png); - background-position: 0px 0px; - width: 81px; - height: 99px; -} -.Pet-Turtle-Desert { - background-image: url(spritesmith-main-13.png); - background-position: -164px -600px; - width: 81px; - height: 99px; -} -.Pet-Turtle-Golden { - background-image: url(spritesmith-main-13.png); - background-position: -246px -600px; - width: 81px; - height: 99px; -} -.Pet-Turtle-Red { - background-image: url(spritesmith-main-13.png); - background-position: -328px -600px; - width: 81px; - height: 99px; -} -.Pet-Turtle-Shade { - background-image: url(spritesmith-main-13.png); - background-position: -410px -600px; - width: 81px; - height: 99px; -} -.Pet-Turtle-Skeleton { - background-image: url(spritesmith-main-13.png); - background-position: -492px -600px; - width: 81px; - height: 99px; -} -.Pet-Turtle-White { - background-image: url(spritesmith-main-13.png); - background-position: -574px -600px; - width: 81px; - height: 99px; -} -.Pet-Turtle-Zombie { +.Pet-Snail-Base { background-image: url(spritesmith-main-13.png); background-position: -656px -600px; width: 81px; height: 99px; } -.Pet-Unicorn-Base { +.Pet-Snail-CottonCandyBlue { + background-image: url(spritesmith-main-13.png); + background-position: -164px 0px; + width: 81px; + height: 99px; +} +.Pet-Snail-CottonCandyPink { + background-image: url(spritesmith-main-13.png); + background-position: 0px -100px; + width: 81px; + height: 99px; +} +.Pet-Snail-Desert { + background-image: url(spritesmith-main-13.png); + background-position: -82px -100px; + width: 81px; + height: 99px; +} +.Pet-Snail-Golden { + background-image: url(spritesmith-main-13.png); + background-position: -164px -100px; + width: 81px; + height: 99px; +} +.Pet-Snail-Red { + background-image: url(spritesmith-main-13.png); + background-position: -246px 0px; + width: 81px; + height: 99px; +} +.Pet-Snail-Shade { + background-image: url(spritesmith-main-13.png); + background-position: -246px -100px; + width: 81px; + height: 99px; +} +.Pet-Snail-Skeleton { + background-image: url(spritesmith-main-13.png); + background-position: 0px -200px; + width: 81px; + height: 99px; +} +.Pet-Snail-White { + background-image: url(spritesmith-main-13.png); + background-position: -82px -200px; + width: 81px; + height: 99px; +} +.Pet-Snail-Zombie { + background-image: url(spritesmith-main-13.png); + background-position: -164px -200px; + width: 81px; + height: 99px; +} +.Pet-Snake-Base { + background-image: url(spritesmith-main-13.png); + background-position: -246px -200px; + width: 81px; + height: 99px; +} +.Pet-Snake-CottonCandyBlue { + background-image: url(spritesmith-main-13.png); + background-position: -328px 0px; + width: 81px; + height: 99px; +} +.Pet-Snake-CottonCandyPink { + background-image: url(spritesmith-main-13.png); + background-position: -328px -100px; + width: 81px; + height: 99px; +} +.Pet-Snake-Desert { + background-image: url(spritesmith-main-13.png); + background-position: -328px -200px; + width: 81px; + height: 99px; +} +.Pet-Snake-Golden { + background-image: url(spritesmith-main-13.png); + background-position: 0px -300px; + width: 81px; + height: 99px; +} +.Pet-Snake-Red { + background-image: url(spritesmith-main-13.png); + background-position: -82px -300px; + width: 81px; + height: 99px; +} +.Pet-Snake-Shade { + background-image: url(spritesmith-main-13.png); + background-position: -164px -300px; + width: 81px; + height: 99px; +} +.Pet-Snake-Skeleton { + background-image: url(spritesmith-main-13.png); + background-position: -246px -300px; + width: 81px; + height: 99px; +} +.Pet-Snake-White { + background-image: url(spritesmith-main-13.png); + background-position: -328px -300px; + width: 81px; + height: 99px; +} +.Pet-Snake-Zombie { + background-image: url(spritesmith-main-13.png); + background-position: -410px 0px; + width: 81px; + height: 99px; +} +.Pet-Spider-Base { + background-image: url(spritesmith-main-13.png); + background-position: -410px -100px; + width: 81px; + height: 99px; +} +.Pet-Spider-CottonCandyBlue { + background-image: url(spritesmith-main-13.png); + background-position: -410px -200px; + width: 81px; + height: 99px; +} +.Pet-Spider-CottonCandyPink { + background-image: url(spritesmith-main-13.png); + background-position: -410px -300px; + width: 81px; + height: 99px; +} +.Pet-Spider-Desert { + background-image: url(spritesmith-main-13.png); + background-position: -492px 0px; + width: 81px; + height: 99px; +} +.Pet-Spider-Golden { + background-image: url(spritesmith-main-13.png); + background-position: -492px -100px; + width: 81px; + height: 99px; +} +.Pet-Spider-Red { + background-image: url(spritesmith-main-13.png); + background-position: -492px -200px; + width: 81px; + height: 99px; +} +.Pet-Spider-Shade { + background-image: url(spritesmith-main-13.png); + background-position: -492px -300px; + width: 81px; + height: 99px; +} +.Pet-Spider-Skeleton { + background-image: url(spritesmith-main-13.png); + background-position: 0px -400px; + width: 81px; + height: 99px; +} +.Pet-Spider-White { + background-image: url(spritesmith-main-13.png); + background-position: -82px -400px; + width: 81px; + height: 99px; +} +.Pet-Spider-Zombie { + background-image: url(spritesmith-main-13.png); + background-position: -164px -400px; + width: 81px; + height: 99px; +} +.Pet-TRex-Base { + background-image: url(spritesmith-main-13.png); + background-position: -82px -600px; + width: 81px; + height: 99px; +} +.Pet-TRex-CottonCandyBlue { + background-image: url(spritesmith-main-13.png); + background-position: -164px -600px; + width: 81px; + height: 99px; +} +.Pet-TRex-CottonCandyPink { + background-image: url(spritesmith-main-13.png); + background-position: -246px -600px; + width: 81px; + height: 99px; +} +.Pet-TRex-Desert { + background-image: url(spritesmith-main-13.png); + background-position: -328px -600px; + width: 81px; + height: 99px; +} +.Pet-TRex-Golden { + background-image: url(spritesmith-main-13.png); + background-position: -410px -600px; + width: 81px; + height: 99px; +} +.Pet-TRex-Red { + background-image: url(spritesmith-main-13.png); + background-position: -492px -600px; + width: 81px; + height: 99px; +} +.Pet-TRex-Shade { + background-image: url(spritesmith-main-13.png); + background-position: -574px -600px; + width: 81px; + height: 99px; +} +.Pet-TRex-Skeleton { + background-image: url(spritesmith-main-13.png); + background-position: 0px 0px; + width: 81px; + height: 99px; +} +.Pet-TRex-White { background-image: url(spritesmith-main-13.png); background-position: -738px 0px; width: 81px; height: 99px; } -.Pet-Unicorn-CottonCandyBlue { +.Pet-TRex-Zombie { background-image: url(spritesmith-main-13.png); background-position: -738px -100px; width: 81px; height: 99px; } -.Pet-Unicorn-CottonCandyPink { +.Pet-Tiger-Veteran { + background-image: url(spritesmith-main-13.png); + background-position: -246px -400px; + width: 81px; + height: 99px; +} +.Pet-TigerCub-Base { + background-image: url(spritesmith-main-13.png); + background-position: -328px -400px; + width: 81px; + height: 99px; +} +.Pet-TigerCub-CottonCandyBlue { + background-image: url(spritesmith-main-13.png); + background-position: -410px -400px; + width: 81px; + height: 99px; +} +.Pet-TigerCub-CottonCandyPink { + background-image: url(spritesmith-main-13.png); + background-position: -492px -400px; + width: 81px; + height: 99px; +} +.Pet-TigerCub-Desert { + background-image: url(spritesmith-main-13.png); + background-position: -574px 0px; + width: 81px; + height: 99px; +} +.Pet-TigerCub-Floral { + background-image: url(spritesmith-main-13.png); + background-position: -574px -100px; + width: 81px; + height: 99px; +} +.Pet-TigerCub-Golden { + background-image: url(spritesmith-main-13.png); + background-position: -574px -200px; + width: 81px; + height: 99px; +} +.Pet-TigerCub-Peppermint { + background-image: url(spritesmith-main-13.png); + background-position: -574px -300px; + width: 81px; + height: 99px; +} +.Pet-TigerCub-Red { + background-image: url(spritesmith-main-13.png); + background-position: -574px -400px; + width: 81px; + height: 99px; +} +.Pet-TigerCub-Shade { + background-image: url(spritesmith-main-13.png); + background-position: 0px -500px; + width: 81px; + height: 99px; +} +.Pet-TigerCub-Skeleton { + background-image: url(spritesmith-main-13.png); + background-position: -82px -500px; + width: 81px; + height: 99px; +} +.Pet-TigerCub-Spooky { + background-image: url(spritesmith-main-13.png); + background-position: -164px -500px; + width: 81px; + height: 99px; +} +.Pet-TigerCub-White { + background-image: url(spritesmith-main-13.png); + background-position: -246px -500px; + width: 81px; + height: 99px; +} +.Pet-TigerCub-Zombie { + background-image: url(spritesmith-main-13.png); + background-position: -328px -500px; + width: 81px; + height: 99px; +} +.Pet-Treeling-Base { + background-image: url(spritesmith-main-13.png); + background-position: -410px -500px; + width: 81px; + height: 99px; +} +.Pet-Treeling-CottonCandyBlue { + background-image: url(spritesmith-main-13.png); + background-position: -492px -500px; + width: 81px; + height: 99px; +} +.Pet-Treeling-CottonCandyPink { + background-image: url(spritesmith-main-13.png); + background-position: -574px -500px; + width: 81px; + height: 99px; +} +.Pet-Treeling-Desert { + background-image: url(spritesmith-main-13.png); + background-position: -656px 0px; + width: 81px; + height: 99px; +} +.Pet-Treeling-Golden { + background-image: url(spritesmith-main-13.png); + background-position: -656px -100px; + width: 81px; + height: 99px; +} +.Pet-Treeling-Red { + background-image: url(spritesmith-main-13.png); + background-position: -656px -200px; + width: 81px; + height: 99px; +} +.Pet-Treeling-Shade { + background-image: url(spritesmith-main-13.png); + background-position: -656px -300px; + width: 81px; + height: 99px; +} +.Pet-Treeling-Skeleton { + background-image: url(spritesmith-main-13.png); + background-position: -656px -400px; + width: 81px; + height: 99px; +} +.Pet-Treeling-White { + background-image: url(spritesmith-main-13.png); + background-position: -656px -500px; + width: 81px; + height: 99px; +} +.Pet-Treeling-Zombie { + background-image: url(spritesmith-main-13.png); + background-position: 0px -600px; + width: 81px; + height: 99px; +} +.Pet-Turkey-Base { background-image: url(spritesmith-main-13.png); background-position: -738px -200px; width: 81px; height: 99px; } -.Pet-Unicorn-Desert { +.Pet-Turkey-Gilded { background-image: url(spritesmith-main-13.png); background-position: -738px -300px; width: 81px; height: 99px; } -.Pet-Unicorn-Golden { +.Pet-Turtle-Base { background-image: url(spritesmith-main-13.png); background-position: -738px -400px; width: 81px; height: 99px; } -.Pet-Unicorn-Red { +.Pet-Turtle-CottonCandyBlue { background-image: url(spritesmith-main-13.png); background-position: -738px -500px; width: 81px; height: 99px; } -.Pet-Unicorn-Shade { +.Pet-Turtle-CottonCandyPink { background-image: url(spritesmith-main-13.png); background-position: -738px -600px; width: 81px; height: 99px; } -.Pet-Unicorn-Skeleton { +.Pet-Turtle-Desert { background-image: url(spritesmith-main-13.png); background-position: 0px -700px; width: 81px; height: 99px; } -.Pet-Unicorn-White { +.Pet-Turtle-Golden { background-image: url(spritesmith-main-13.png); background-position: -82px -700px; width: 81px; height: 99px; } -.Pet-Unicorn-Zombie { +.Pet-Turtle-Red { background-image: url(spritesmith-main-13.png); background-position: -164px -700px; width: 81px; height: 99px; } -.Pet-Whale-Base { +.Pet-Turtle-Shade { background-image: url(spritesmith-main-13.png); background-position: -246px -700px; width: 81px; height: 99px; } -.Pet-Whale-CottonCandyBlue { +.Pet-Turtle-Skeleton { background-image: url(spritesmith-main-13.png); background-position: -328px -700px; width: 81px; height: 99px; } -.Pet-Whale-CottonCandyPink { +.Pet-Turtle-White { background-image: url(spritesmith-main-13.png); background-position: -410px -700px; width: 81px; height: 99px; } -.Pet-Whale-Desert { +.Pet-Turtle-Zombie { background-image: url(spritesmith-main-13.png); background-position: -492px -700px; width: 81px; height: 99px; } -.Pet-Whale-Golden { +.Pet-Unicorn-Base { background-image: url(spritesmith-main-13.png); background-position: -574px -700px; width: 81px; height: 99px; } -.Pet-Whale-Red { +.Pet-Unicorn-CottonCandyBlue { background-image: url(spritesmith-main-13.png); background-position: -656px -700px; width: 81px; height: 99px; } -.Pet-Whale-Shade { +.Pet-Unicorn-CottonCandyPink { background-image: url(spritesmith-main-13.png); background-position: -738px -700px; width: 81px; height: 99px; } -.Pet-Whale-Skeleton { +.Pet-Unicorn-Desert { background-image: url(spritesmith-main-13.png); background-position: -820px 0px; width: 81px; height: 99px; } -.Pet-Whale-White { +.Pet-Unicorn-Golden { background-image: url(spritesmith-main-13.png); background-position: -820px -100px; width: 81px; height: 99px; } -.Pet-Whale-Zombie { +.Pet-Unicorn-Red { background-image: url(spritesmith-main-13.png); background-position: -820px -200px; width: 81px; height: 99px; } -.Pet-Wolf-Base { +.Pet-Unicorn-Shade { background-image: url(spritesmith-main-13.png); background-position: -820px -300px; width: 81px; height: 99px; } -.Pet-Wolf-CottonCandyBlue { +.Pet-Unicorn-Skeleton { background-image: url(spritesmith-main-13.png); background-position: -820px -400px; width: 81px; height: 99px; } -.Pet-Wolf-CottonCandyPink { +.Pet-Unicorn-White { background-image: url(spritesmith-main-13.png); background-position: -820px -500px; width: 81px; height: 99px; } -.Pet-Wolf-Desert { +.Pet-Unicorn-Zombie { background-image: url(spritesmith-main-13.png); background-position: -820px -600px; width: 81px; height: 99px; } -.Pet-Wolf-Floral { +.Pet-Whale-Base { background-image: url(spritesmith-main-13.png); background-position: -820px -700px; width: 81px; height: 99px; } -.Pet-Wolf-Golden { +.Pet-Whale-CottonCandyBlue { background-image: url(spritesmith-main-13.png); background-position: 0px -800px; width: 81px; height: 99px; } -.Pet-Wolf-Peppermint { +.Pet-Whale-CottonCandyPink { background-image: url(spritesmith-main-13.png); background-position: -82px -800px; width: 81px; height: 99px; } -.Pet-Wolf-Red { +.Pet-Whale-Desert { background-image: url(spritesmith-main-13.png); background-position: -164px -800px; width: 81px; height: 99px; } -.Pet-Wolf-Shade { +.Pet-Whale-Golden { background-image: url(spritesmith-main-13.png); background-position: -246px -800px; width: 81px; height: 99px; } -.Pet-Wolf-Skeleton { +.Pet-Whale-Red { background-image: url(spritesmith-main-13.png); background-position: -328px -800px; width: 81px; height: 99px; } -.Pet-Wolf-Spooky { +.Pet-Whale-Shade { background-image: url(spritesmith-main-13.png); background-position: -410px -800px; width: 81px; height: 99px; } -.Pet-Wolf-Veteran { +.Pet-Whale-Skeleton { background-image: url(spritesmith-main-13.png); background-position: -492px -800px; width: 81px; height: 99px; } -.Pet-Wolf-White { +.Pet-Whale-White { background-image: url(spritesmith-main-13.png); background-position: -574px -800px; width: 81px; height: 99px; } -.Pet-Wolf-Zombie { +.Pet-Whale-Zombie { background-image: url(spritesmith-main-13.png); background-position: -656px -800px; width: 81px; height: 99px; } +.Pet-Wolf-Base { + background-image: url(spritesmith-main-13.png); + background-position: -738px -800px; + width: 81px; + height: 99px; +} +.Pet-Wolf-CottonCandyBlue { + background-image: url(spritesmith-main-13.png); + background-position: -820px -800px; + width: 81px; + height: 99px; +} +.Pet-Wolf-CottonCandyPink { + background-image: url(spritesmith-main-13.png); + background-position: -902px 0px; + width: 81px; + height: 99px; +} +.Pet-Wolf-Desert { + background-image: url(spritesmith-main-13.png); + background-position: -902px -100px; + width: 81px; + height: 99px; +} +.Pet-Wolf-Floral { + background-image: url(spritesmith-main-13.png); + background-position: -902px -200px; + width: 81px; + height: 99px; +} +.Pet-Wolf-Golden { + background-image: url(spritesmith-main-13.png); + background-position: -902px -300px; + width: 81px; + height: 99px; +} +.Pet-Wolf-Peppermint { + background-image: url(spritesmith-main-13.png); + background-position: -902px -400px; + width: 81px; + height: 99px; +} +.Pet-Wolf-Red { + background-image: url(spritesmith-main-13.png); + background-position: -902px -500px; + width: 81px; + height: 99px; +} +.Pet-Wolf-Shade { + background-image: url(spritesmith-main-13.png); + background-position: -902px -600px; + width: 81px; + height: 99px; +} +.Pet-Wolf-Skeleton { + background-image: url(spritesmith-main-13.png); + background-position: -902px -700px; + width: 81px; + height: 99px; +} +.Pet-Wolf-Spooky { + background-image: url(spritesmith-main-13.png); + background-position: -902px -800px; + width: 81px; + height: 99px; +} +.Pet-Wolf-Veteran { + background-image: url(spritesmith-main-13.png); + background-position: -984px 0px; + width: 81px; + height: 99px; +} +.Pet-Wolf-White { + background-image: url(spritesmith-main-13.png); + background-position: -984px -100px; + width: 81px; + height: 99px; +} +.Pet-Wolf-Zombie { + background-image: url(spritesmith-main-13.png); + background-position: -984px -200px; + width: 81px; + height: 99px; +} .Pet_HatchingPotion_Base { background-image: url(spritesmith-main-13.png); - background-position: -787px -800px; + background-position: -984px -352px; width: 48px; height: 51px; } .Pet_HatchingPotion_CottonCandyBlue { background-image: url(spritesmith-main-13.png); - background-position: -902px -156px; + background-position: -984px -612px; width: 48px; height: 51px; } .Pet_HatchingPotion_CottonCandyPink { background-image: url(spritesmith-main-13.png); - background-position: -836px -800px; + background-position: -984px -404px; width: 48px; height: 51px; } .Pet_HatchingPotion_Desert { background-image: url(spritesmith-main-13.png); - background-position: -902px 0px; + background-position: -984px -456px; width: 48px; height: 51px; } .Pet_HatchingPotion_Floral { background-image: url(spritesmith-main-13.png); - background-position: -902px -52px; + background-position: -984px -508px; width: 48px; height: 51px; } .Pet_HatchingPotion_Golden { background-image: url(spritesmith-main-13.png); - background-position: -902px -104px; + background-position: -984px -560px; width: 48px; height: 51px; } .Pet_HatchingPotion_Peppermint { background-image: url(spritesmith-main-13.png); - background-position: -738px -800px; + background-position: -984px -300px; width: 48px; height: 51px; } .Pet_HatchingPotion_Red { background-image: url(spritesmith-main-13.png); - background-position: -902px -208px; + background-position: -984px -664px; width: 48px; height: 51px; } .Pet_HatchingPotion_Shade { background-image: url(spritesmith-main-13.png); - background-position: -902px -260px; + background-position: -984px -716px; width: 48px; height: 51px; } .Pet_HatchingPotion_Skeleton { background-image: url(spritesmith-main-13.png); - background-position: -902px -312px; + background-position: -984px -768px; width: 48px; height: 51px; } .Pet_HatchingPotion_Spooky { background-image: url(spritesmith-main-13.png); - background-position: -902px -364px; + background-position: -984px -820px; width: 48px; height: 51px; } .Pet_HatchingPotion_White { background-image: url(spritesmith-main-13.png); - background-position: -902px -416px; + background-position: 0px -900px; width: 48px; height: 51px; } .Pet_HatchingPotion_Zombie { background-image: url(spritesmith-main-13.png); - background-position: -902px -468px; + background-position: -49px -900px; width: 48px; height: 51px; } diff --git a/common/dist/sprites/spritesmith-main-13.png b/common/dist/sprites/spritesmith-main-13.png index 922727317c..a7afe1f867 100644 Binary files a/common/dist/sprites/spritesmith-main-13.png and b/common/dist/sprites/spritesmith-main-13.png differ diff --git a/common/dist/sprites/spritesmith-main-2.css b/common/dist/sprites/spritesmith-main-2.css index 0bc624db33..bf5501f9fe 100644 --- a/common/dist/sprites/spritesmith-main-2.css +++ b/common/dist/sprites/spritesmith-main-2.css @@ -1,3946 +1,3946 @@ -.hair_base_12_yellow { - background-image: url(spritesmith-main-2.png); - background-position: -91px 0px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_12_yellow { - background-image: url(spritesmith-main-2.png); - background-position: -116px -15px; - width: 60px; - height: 60px; -} -.hair_base_12_zombie { - background-image: url(spritesmith-main-2.png); - background-position: -728px -1092px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_12_zombie { - background-image: url(spritesmith-main-2.png); - background-position: -753px -1107px; - width: 60px; - height: 60px; -} -.hair_base_13_TRUred { - background-image: url(spritesmith-main-2.png); - background-position: -455px -455px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_13_TRUred { - background-image: url(spritesmith-main-2.png); - background-position: -480px -470px; - width: 60px; - height: 60px; -} -.hair_base_13_aurora { - background-image: url(spritesmith-main-2.png); - background-position: 0px -91px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_13_aurora { - background-image: url(spritesmith-main-2.png); - background-position: -25px -106px; - width: 60px; - height: 60px; -} -.hair_base_13_black { +.hair_base_12_TRUred { background-image: url(spritesmith-main-2.png); background-position: -91px -91px; width: 90px; height: 90px; } -.customize-option.hair_base_13_black { +.customize-option.hair_base_12_TRUred { background-image: url(spritesmith-main-2.png); background-position: -116px -106px; width: 60px; height: 60px; } -.hair_base_13_blond { +.hair_base_12_rainbow { + background-image: url(spritesmith-main-2.png); + background-position: -91px 0px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_12_rainbow { + background-image: url(spritesmith-main-2.png); + background-position: -116px -15px; + width: 60px; + height: 60px; +} +.hair_base_12_red { + background-image: url(spritesmith-main-2.png); + background-position: -728px -1092px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_12_red { + background-image: url(spritesmith-main-2.png); + background-position: -753px -1107px; + width: 60px; + height: 60px; +} +.hair_base_12_snowy { + background-image: url(spritesmith-main-2.png); + background-position: 0px -91px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_12_snowy { + background-image: url(spritesmith-main-2.png); + background-position: -25px -106px; + width: 60px; + height: 60px; +} +.hair_base_12_white { background-image: url(spritesmith-main-2.png); background-position: -182px 0px; width: 90px; height: 90px; } -.customize-option.hair_base_13_blond { +.customize-option.hair_base_12_white { background-image: url(spritesmith-main-2.png); background-position: -207px -15px; width: 60px; height: 60px; } -.hair_base_13_blue { +.hair_base_12_winternight { background-image: url(spritesmith-main-2.png); background-position: -182px -91px; width: 90px; height: 90px; } -.customize-option.hair_base_13_blue { +.customize-option.hair_base_12_winternight { background-image: url(spritesmith-main-2.png); background-position: -207px -106px; width: 60px; height: 60px; } -.hair_base_13_brown { +.hair_base_12_winterstar { background-image: url(spritesmith-main-2.png); background-position: 0px -182px; width: 90px; height: 90px; } -.customize-option.hair_base_13_brown { +.customize-option.hair_base_12_winterstar { background-image: url(spritesmith-main-2.png); background-position: -25px -197px; width: 60px; height: 60px; } -.hair_base_13_candycane { +.hair_base_12_yellow { background-image: url(spritesmith-main-2.png); background-position: -91px -182px; width: 90px; height: 90px; } -.customize-option.hair_base_13_candycane { +.customize-option.hair_base_12_yellow { background-image: url(spritesmith-main-2.png); background-position: -116px -197px; width: 60px; height: 60px; } -.hair_base_13_candycorn { +.hair_base_12_zombie { background-image: url(spritesmith-main-2.png); background-position: -182px -182px; width: 90px; height: 90px; } -.customize-option.hair_base_13_candycorn { +.customize-option.hair_base_12_zombie { background-image: url(spritesmith-main-2.png); background-position: -207px -197px; width: 60px; height: 60px; } -.hair_base_13_festive { - background-image: url(spritesmith-main-2.png); - background-position: -273px 0px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_13_festive { - background-image: url(spritesmith-main-2.png); - background-position: -298px -15px; - width: 60px; - height: 60px; -} -.hair_base_13_frost { - background-image: url(spritesmith-main-2.png); - background-position: -273px -91px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_13_frost { - background-image: url(spritesmith-main-2.png); - background-position: -298px -106px; - width: 60px; - height: 60px; -} -.hair_base_13_ghostwhite { - background-image: url(spritesmith-main-2.png); - background-position: -273px -182px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_13_ghostwhite { - background-image: url(spritesmith-main-2.png); - background-position: -298px -197px; - width: 60px; - height: 60px; -} -.hair_base_13_green { - background-image: url(spritesmith-main-2.png); - background-position: 0px -273px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_13_green { - background-image: url(spritesmith-main-2.png); - background-position: -25px -288px; - width: 60px; - height: 60px; -} -.hair_base_13_halloween { - background-image: url(spritesmith-main-2.png); - background-position: -91px -273px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_13_halloween { - background-image: url(spritesmith-main-2.png); - background-position: -116px -288px; - width: 60px; - height: 60px; -} -.hair_base_13_holly { - background-image: url(spritesmith-main-2.png); - background-position: -182px -273px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_13_holly { - background-image: url(spritesmith-main-2.png); - background-position: -207px -288px; - width: 60px; - height: 60px; -} -.hair_base_13_hollygreen { - background-image: url(spritesmith-main-2.png); - background-position: -273px -273px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_13_hollygreen { - background-image: url(spritesmith-main-2.png); - background-position: -298px -288px; - width: 60px; - height: 60px; -} -.hair_base_13_midnight { - background-image: url(spritesmith-main-2.png); - background-position: -364px 0px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_13_midnight { - background-image: url(spritesmith-main-2.png); - background-position: -389px -15px; - width: 60px; - height: 60px; -} -.hair_base_13_pblue { - background-image: url(spritesmith-main-2.png); - background-position: -364px -91px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_13_pblue { - background-image: url(spritesmith-main-2.png); - background-position: -389px -106px; - width: 60px; - height: 60px; -} -.hair_base_13_pblue2 { - background-image: url(spritesmith-main-2.png); - background-position: -364px -182px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_13_pblue2 { - background-image: url(spritesmith-main-2.png); - background-position: -389px -197px; - width: 60px; - height: 60px; -} -.hair_base_13_peppermint { - background-image: url(spritesmith-main-2.png); - background-position: -364px -273px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_13_peppermint { - background-image: url(spritesmith-main-2.png); - background-position: -389px -288px; - width: 60px; - height: 60px; -} -.hair_base_13_pgreen { - background-image: url(spritesmith-main-2.png); - background-position: 0px -364px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_13_pgreen { - background-image: url(spritesmith-main-2.png); - background-position: -25px -379px; - width: 60px; - height: 60px; -} -.hair_base_13_pgreen2 { - background-image: url(spritesmith-main-2.png); - background-position: -91px -364px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_13_pgreen2 { - background-image: url(spritesmith-main-2.png); - background-position: -116px -379px; - width: 60px; - height: 60px; -} -.hair_base_13_porange { - background-image: url(spritesmith-main-2.png); - background-position: -182px -364px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_13_porange { - background-image: url(spritesmith-main-2.png); - background-position: -207px -379px; - width: 60px; - height: 60px; -} -.hair_base_13_porange2 { - background-image: url(spritesmith-main-2.png); - background-position: -273px -364px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_13_porange2 { - background-image: url(spritesmith-main-2.png); - background-position: -298px -379px; - width: 60px; - height: 60px; -} -.hair_base_13_ppink { - background-image: url(spritesmith-main-2.png); - background-position: -364px -364px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_13_ppink { - background-image: url(spritesmith-main-2.png); - background-position: -389px -379px; - width: 60px; - height: 60px; -} -.hair_base_13_ppink2 { - background-image: url(spritesmith-main-2.png); - background-position: -455px 0px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_13_ppink2 { - background-image: url(spritesmith-main-2.png); - background-position: -480px -15px; - width: 60px; - height: 60px; -} -.hair_base_13_ppurple { - background-image: url(spritesmith-main-2.png); - background-position: -455px -91px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_13_ppurple { - background-image: url(spritesmith-main-2.png); - background-position: -480px -106px; - width: 60px; - height: 60px; -} -.hair_base_13_ppurple2 { - background-image: url(spritesmith-main-2.png); - background-position: -455px -182px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_13_ppurple2 { - background-image: url(spritesmith-main-2.png); - background-position: -480px -197px; - width: 60px; - height: 60px; -} -.hair_base_13_pumpkin { - background-image: url(spritesmith-main-2.png); - background-position: -455px -273px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_13_pumpkin { - background-image: url(spritesmith-main-2.png); - background-position: -480px -288px; - width: 60px; - height: 60px; -} -.hair_base_13_purple { - background-image: url(spritesmith-main-2.png); - background-position: -455px -364px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_13_purple { - background-image: url(spritesmith-main-2.png); - background-position: -480px -379px; - width: 60px; - height: 60px; -} -.hair_base_13_pyellow { - background-image: url(spritesmith-main-2.png); - background-position: 0px -455px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_13_pyellow { - background-image: url(spritesmith-main-2.png); - background-position: -25px -470px; - width: 60px; - height: 60px; -} -.hair_base_13_pyellow2 { - background-image: url(spritesmith-main-2.png); - background-position: -91px -455px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_13_pyellow2 { - background-image: url(spritesmith-main-2.png); - background-position: -116px -470px; - width: 60px; - height: 60px; -} -.hair_base_13_rainbow { - background-image: url(spritesmith-main-2.png); - background-position: -182px -455px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_13_rainbow { - background-image: url(spritesmith-main-2.png); - background-position: -207px -470px; - width: 60px; - height: 60px; -} -.hair_base_13_red { - background-image: url(spritesmith-main-2.png); - background-position: -273px -455px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_13_red { - background-image: url(spritesmith-main-2.png); - background-position: -298px -470px; - width: 60px; - height: 60px; -} -.hair_base_13_snowy { - background-image: url(spritesmith-main-2.png); - background-position: -364px -455px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_13_snowy { - background-image: url(spritesmith-main-2.png); - background-position: -389px -470px; - width: 60px; - height: 60px; -} -.hair_base_13_white { - background-image: url(spritesmith-main-2.png); - background-position: -546px 0px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_13_white { - background-image: url(spritesmith-main-2.png); - background-position: -571px -15px; - width: 60px; - height: 60px; -} -.hair_base_13_winternight { - background-image: url(spritesmith-main-2.png); - background-position: -546px -91px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_13_winternight { - background-image: url(spritesmith-main-2.png); - background-position: -571px -106px; - width: 60px; - height: 60px; -} -.hair_base_13_winterstar { - background-image: url(spritesmith-main-2.png); - background-position: -546px -182px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_13_winterstar { - background-image: url(spritesmith-main-2.png); - background-position: -571px -197px; - width: 60px; - height: 60px; -} -.hair_base_13_yellow { - background-image: url(spritesmith-main-2.png); - background-position: -546px -273px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_13_yellow { - background-image: url(spritesmith-main-2.png); - background-position: -571px -288px; - width: 60px; - height: 60px; -} -.hair_base_13_zombie { - background-image: url(spritesmith-main-2.png); - background-position: -546px -364px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_13_zombie { - background-image: url(spritesmith-main-2.png); - background-position: -571px -379px; - width: 60px; - height: 60px; -} -.hair_base_14_TRUred { - background-image: url(spritesmith-main-2.png); - background-position: -182px -728px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_14_TRUred { - background-image: url(spritesmith-main-2.png); - background-position: -207px -743px; - width: 60px; - height: 60px; -} -.hair_base_14_aurora { - background-image: url(spritesmith-main-2.png); - background-position: -546px -455px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_14_aurora { - background-image: url(spritesmith-main-2.png); - background-position: -571px -470px; - width: 60px; - height: 60px; -} -.hair_base_14_black { +.hair_base_13_TRUred { background-image: url(spritesmith-main-2.png); background-position: 0px -546px; width: 90px; height: 90px; } -.customize-option.hair_base_14_black { +.customize-option.hair_base_13_TRUred { background-image: url(spritesmith-main-2.png); background-position: -25px -561px; width: 60px; height: 60px; } -.hair_base_14_blond { +.hair_base_13_aurora { + background-image: url(spritesmith-main-2.png); + background-position: -273px 0px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_13_aurora { + background-image: url(spritesmith-main-2.png); + background-position: -298px -15px; + width: 60px; + height: 60px; +} +.hair_base_13_black { + background-image: url(spritesmith-main-2.png); + background-position: -273px -91px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_13_black { + background-image: url(spritesmith-main-2.png); + background-position: -298px -106px; + width: 60px; + height: 60px; +} +.hair_base_13_blond { + background-image: url(spritesmith-main-2.png); + background-position: -273px -182px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_13_blond { + background-image: url(spritesmith-main-2.png); + background-position: -298px -197px; + width: 60px; + height: 60px; +} +.hair_base_13_blue { + background-image: url(spritesmith-main-2.png); + background-position: 0px -273px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_13_blue { + background-image: url(spritesmith-main-2.png); + background-position: -25px -288px; + width: 60px; + height: 60px; +} +.hair_base_13_brown { + background-image: url(spritesmith-main-2.png); + background-position: -91px -273px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_13_brown { + background-image: url(spritesmith-main-2.png); + background-position: -116px -288px; + width: 60px; + height: 60px; +} +.hair_base_13_candycane { + background-image: url(spritesmith-main-2.png); + background-position: -182px -273px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_13_candycane { + background-image: url(spritesmith-main-2.png); + background-position: -207px -288px; + width: 60px; + height: 60px; +} +.hair_base_13_candycorn { + background-image: url(spritesmith-main-2.png); + background-position: -273px -273px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_13_candycorn { + background-image: url(spritesmith-main-2.png); + background-position: -298px -288px; + width: 60px; + height: 60px; +} +.hair_base_13_festive { + background-image: url(spritesmith-main-2.png); + background-position: -364px 0px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_13_festive { + background-image: url(spritesmith-main-2.png); + background-position: -389px -15px; + width: 60px; + height: 60px; +} +.hair_base_13_frost { + background-image: url(spritesmith-main-2.png); + background-position: -364px -91px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_13_frost { + background-image: url(spritesmith-main-2.png); + background-position: -389px -106px; + width: 60px; + height: 60px; +} +.hair_base_13_ghostwhite { + background-image: url(spritesmith-main-2.png); + background-position: -364px -182px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_13_ghostwhite { + background-image: url(spritesmith-main-2.png); + background-position: -389px -197px; + width: 60px; + height: 60px; +} +.hair_base_13_green { + background-image: url(spritesmith-main-2.png); + background-position: -364px -273px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_13_green { + background-image: url(spritesmith-main-2.png); + background-position: -389px -288px; + width: 60px; + height: 60px; +} +.hair_base_13_halloween { + background-image: url(spritesmith-main-2.png); + background-position: 0px -364px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_13_halloween { + background-image: url(spritesmith-main-2.png); + background-position: -25px -379px; + width: 60px; + height: 60px; +} +.hair_base_13_holly { + background-image: url(spritesmith-main-2.png); + background-position: -91px -364px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_13_holly { + background-image: url(spritesmith-main-2.png); + background-position: -116px -379px; + width: 60px; + height: 60px; +} +.hair_base_13_hollygreen { + background-image: url(spritesmith-main-2.png); + background-position: -182px -364px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_13_hollygreen { + background-image: url(spritesmith-main-2.png); + background-position: -207px -379px; + width: 60px; + height: 60px; +} +.hair_base_13_midnight { + background-image: url(spritesmith-main-2.png); + background-position: -273px -364px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_13_midnight { + background-image: url(spritesmith-main-2.png); + background-position: -298px -379px; + width: 60px; + height: 60px; +} +.hair_base_13_pblue { + background-image: url(spritesmith-main-2.png); + background-position: -364px -364px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_13_pblue { + background-image: url(spritesmith-main-2.png); + background-position: -389px -379px; + width: 60px; + height: 60px; +} +.hair_base_13_pblue2 { + background-image: url(spritesmith-main-2.png); + background-position: -455px 0px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_13_pblue2 { + background-image: url(spritesmith-main-2.png); + background-position: -480px -15px; + width: 60px; + height: 60px; +} +.hair_base_13_peppermint { + background-image: url(spritesmith-main-2.png); + background-position: -455px -91px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_13_peppermint { + background-image: url(spritesmith-main-2.png); + background-position: -480px -106px; + width: 60px; + height: 60px; +} +.hair_base_13_pgreen { + background-image: url(spritesmith-main-2.png); + background-position: -455px -182px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_13_pgreen { + background-image: url(spritesmith-main-2.png); + background-position: -480px -197px; + width: 60px; + height: 60px; +} +.hair_base_13_pgreen2 { + background-image: url(spritesmith-main-2.png); + background-position: -455px -273px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_13_pgreen2 { + background-image: url(spritesmith-main-2.png); + background-position: -480px -288px; + width: 60px; + height: 60px; +} +.hair_base_13_porange { + background-image: url(spritesmith-main-2.png); + background-position: -455px -364px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_13_porange { + background-image: url(spritesmith-main-2.png); + background-position: -480px -379px; + width: 60px; + height: 60px; +} +.hair_base_13_porange2 { + background-image: url(spritesmith-main-2.png); + background-position: 0px -455px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_13_porange2 { + background-image: url(spritesmith-main-2.png); + background-position: -25px -470px; + width: 60px; + height: 60px; +} +.hair_base_13_ppink { + background-image: url(spritesmith-main-2.png); + background-position: -91px -455px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_13_ppink { + background-image: url(spritesmith-main-2.png); + background-position: -116px -470px; + width: 60px; + height: 60px; +} +.hair_base_13_ppink2 { + background-image: url(spritesmith-main-2.png); + background-position: -182px -455px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_13_ppink2 { + background-image: url(spritesmith-main-2.png); + background-position: -207px -470px; + width: 60px; + height: 60px; +} +.hair_base_13_ppurple { + background-image: url(spritesmith-main-2.png); + background-position: -273px -455px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_13_ppurple { + background-image: url(spritesmith-main-2.png); + background-position: -298px -470px; + width: 60px; + height: 60px; +} +.hair_base_13_ppurple2 { + background-image: url(spritesmith-main-2.png); + background-position: -364px -455px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_13_ppurple2 { + background-image: url(spritesmith-main-2.png); + background-position: -389px -470px; + width: 60px; + height: 60px; +} +.hair_base_13_pumpkin { + background-image: url(spritesmith-main-2.png); + background-position: -455px -455px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_13_pumpkin { + background-image: url(spritesmith-main-2.png); + background-position: -480px -470px; + width: 60px; + height: 60px; +} +.hair_base_13_purple { + background-image: url(spritesmith-main-2.png); + background-position: -546px 0px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_13_purple { + background-image: url(spritesmith-main-2.png); + background-position: -571px -15px; + width: 60px; + height: 60px; +} +.hair_base_13_pyellow { + background-image: url(spritesmith-main-2.png); + background-position: -546px -91px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_13_pyellow { + background-image: url(spritesmith-main-2.png); + background-position: -571px -106px; + width: 60px; + height: 60px; +} +.hair_base_13_pyellow2 { + background-image: url(spritesmith-main-2.png); + background-position: -546px -182px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_13_pyellow2 { + background-image: url(spritesmith-main-2.png); + background-position: -571px -197px; + width: 60px; + height: 60px; +} +.hair_base_13_rainbow { + background-image: url(spritesmith-main-2.png); + background-position: -546px -273px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_13_rainbow { + background-image: url(spritesmith-main-2.png); + background-position: -571px -288px; + width: 60px; + height: 60px; +} +.hair_base_13_red { + background-image: url(spritesmith-main-2.png); + background-position: -546px -364px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_13_red { + background-image: url(spritesmith-main-2.png); + background-position: -571px -379px; + width: 60px; + height: 60px; +} +.hair_base_13_snowy { + background-image: url(spritesmith-main-2.png); + background-position: -546px -455px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_13_snowy { + background-image: url(spritesmith-main-2.png); + background-position: -571px -470px; + width: 60px; + height: 60px; +} +.hair_base_13_white { background-image: url(spritesmith-main-2.png); background-position: -91px -546px; width: 90px; height: 90px; } -.customize-option.hair_base_14_blond { +.customize-option.hair_base_13_white { background-image: url(spritesmith-main-2.png); background-position: -116px -561px; width: 60px; height: 60px; } -.hair_base_14_blue { +.hair_base_13_winternight { background-image: url(spritesmith-main-2.png); background-position: -182px -546px; width: 90px; height: 90px; } -.customize-option.hair_base_14_blue { +.customize-option.hair_base_13_winternight { background-image: url(spritesmith-main-2.png); background-position: -207px -561px; width: 60px; height: 60px; } -.hair_base_14_brown { +.hair_base_13_winterstar { background-image: url(spritesmith-main-2.png); background-position: -273px -546px; width: 90px; height: 90px; } -.customize-option.hair_base_14_brown { +.customize-option.hair_base_13_winterstar { background-image: url(spritesmith-main-2.png); background-position: -298px -561px; width: 60px; height: 60px; } -.hair_base_14_candycane { +.hair_base_13_yellow { background-image: url(spritesmith-main-2.png); background-position: -364px -546px; width: 90px; height: 90px; } -.customize-option.hair_base_14_candycane { +.customize-option.hair_base_13_yellow { background-image: url(spritesmith-main-2.png); background-position: -389px -561px; width: 60px; height: 60px; } -.hair_base_14_candycorn { +.hair_base_13_zombie { background-image: url(spritesmith-main-2.png); background-position: -455px -546px; width: 90px; height: 90px; } -.customize-option.hair_base_14_candycorn { +.customize-option.hair_base_13_zombie { background-image: url(spritesmith-main-2.png); background-position: -480px -561px; width: 60px; height: 60px; } -.hair_base_14_festive { - background-image: url(spritesmith-main-2.png); - background-position: -546px -546px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_14_festive { - background-image: url(spritesmith-main-2.png); - background-position: -571px -561px; - width: 60px; - height: 60px; -} -.hair_base_14_frost { - background-image: url(spritesmith-main-2.png); - background-position: -637px 0px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_14_frost { - background-image: url(spritesmith-main-2.png); - background-position: -662px -15px; - width: 60px; - height: 60px; -} -.hair_base_14_ghostwhite { - background-image: url(spritesmith-main-2.png); - background-position: -637px -91px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_14_ghostwhite { - background-image: url(spritesmith-main-2.png); - background-position: -662px -106px; - width: 60px; - height: 60px; -} -.hair_base_14_green { - background-image: url(spritesmith-main-2.png); - background-position: -637px -182px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_14_green { - background-image: url(spritesmith-main-2.png); - background-position: -662px -197px; - width: 60px; - height: 60px; -} -.hair_base_14_halloween { - background-image: url(spritesmith-main-2.png); - background-position: -637px -273px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_14_halloween { - background-image: url(spritesmith-main-2.png); - background-position: -662px -288px; - width: 60px; - height: 60px; -} -.hair_base_14_holly { - background-image: url(spritesmith-main-2.png); - background-position: -637px -364px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_14_holly { - background-image: url(spritesmith-main-2.png); - background-position: -662px -379px; - width: 60px; - height: 60px; -} -.hair_base_14_hollygreen { - background-image: url(spritesmith-main-2.png); - background-position: -637px -455px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_14_hollygreen { - background-image: url(spritesmith-main-2.png); - background-position: -662px -470px; - width: 60px; - height: 60px; -} -.hair_base_14_midnight { - background-image: url(spritesmith-main-2.png); - background-position: -637px -546px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_14_midnight { - background-image: url(spritesmith-main-2.png); - background-position: -662px -561px; - width: 60px; - height: 60px; -} -.hair_base_14_pblue { - background-image: url(spritesmith-main-2.png); - background-position: 0px -637px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_14_pblue { - background-image: url(spritesmith-main-2.png); - background-position: -25px -652px; - width: 60px; - height: 60px; -} -.hair_base_14_pblue2 { - background-image: url(spritesmith-main-2.png); - background-position: -91px -637px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_14_pblue2 { - background-image: url(spritesmith-main-2.png); - background-position: -116px -652px; - width: 60px; - height: 60px; -} -.hair_base_14_peppermint { - background-image: url(spritesmith-main-2.png); - background-position: -182px -637px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_14_peppermint { - background-image: url(spritesmith-main-2.png); - background-position: -207px -652px; - width: 60px; - height: 60px; -} -.hair_base_14_pgreen { - background-image: url(spritesmith-main-2.png); - background-position: -273px -637px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_14_pgreen { - background-image: url(spritesmith-main-2.png); - background-position: -298px -652px; - width: 60px; - height: 60px; -} -.hair_base_14_pgreen2 { - background-image: url(spritesmith-main-2.png); - background-position: -364px -637px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_14_pgreen2 { - background-image: url(spritesmith-main-2.png); - background-position: -389px -652px; - width: 60px; - height: 60px; -} -.hair_base_14_porange { - background-image: url(spritesmith-main-2.png); - background-position: -455px -637px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_14_porange { - background-image: url(spritesmith-main-2.png); - background-position: -480px -652px; - width: 60px; - height: 60px; -} -.hair_base_14_porange2 { - background-image: url(spritesmith-main-2.png); - background-position: -546px -637px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_14_porange2 { - background-image: url(spritesmith-main-2.png); - background-position: -571px -652px; - width: 60px; - height: 60px; -} -.hair_base_14_ppink { - background-image: url(spritesmith-main-2.png); - background-position: -637px -637px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_14_ppink { - background-image: url(spritesmith-main-2.png); - background-position: -662px -652px; - width: 60px; - height: 60px; -} -.hair_base_14_ppink2 { - background-image: url(spritesmith-main-2.png); - background-position: -728px 0px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_14_ppink2 { - background-image: url(spritesmith-main-2.png); - background-position: -753px -15px; - width: 60px; - height: 60px; -} -.hair_base_14_ppurple { - background-image: url(spritesmith-main-2.png); - background-position: -728px -91px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_14_ppurple { - background-image: url(spritesmith-main-2.png); - background-position: -753px -106px; - width: 60px; - height: 60px; -} -.hair_base_14_ppurple2 { - background-image: url(spritesmith-main-2.png); - background-position: -728px -182px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_14_ppurple2 { - background-image: url(spritesmith-main-2.png); - background-position: -753px -197px; - width: 60px; - height: 60px; -} -.hair_base_14_pumpkin { - background-image: url(spritesmith-main-2.png); - background-position: -728px -273px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_14_pumpkin { - background-image: url(spritesmith-main-2.png); - background-position: -753px -288px; - width: 60px; - height: 60px; -} -.hair_base_14_purple { - background-image: url(spritesmith-main-2.png); - background-position: -728px -364px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_14_purple { - background-image: url(spritesmith-main-2.png); - background-position: -753px -379px; - width: 60px; - height: 60px; -} -.hair_base_14_pyellow { - background-image: url(spritesmith-main-2.png); - background-position: -728px -455px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_14_pyellow { - background-image: url(spritesmith-main-2.png); - background-position: -753px -470px; - width: 60px; - height: 60px; -} -.hair_base_14_pyellow2 { - background-image: url(spritesmith-main-2.png); - background-position: -728px -546px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_14_pyellow2 { - background-image: url(spritesmith-main-2.png); - background-position: -753px -561px; - width: 60px; - height: 60px; -} -.hair_base_14_rainbow { - background-image: url(spritesmith-main-2.png); - background-position: -728px -637px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_14_rainbow { - background-image: url(spritesmith-main-2.png); - background-position: -753px -652px; - width: 60px; - height: 60px; -} -.hair_base_14_red { - background-image: url(spritesmith-main-2.png); - background-position: 0px -728px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_14_red { - background-image: url(spritesmith-main-2.png); - background-position: -25px -743px; - width: 60px; - height: 60px; -} -.hair_base_14_snowy { - background-image: url(spritesmith-main-2.png); - background-position: -91px -728px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_14_snowy { - background-image: url(spritesmith-main-2.png); - background-position: -116px -743px; - width: 60px; - height: 60px; -} -.hair_base_14_white { - background-image: url(spritesmith-main-2.png); - background-position: -273px -728px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_14_white { - background-image: url(spritesmith-main-2.png); - background-position: -298px -743px; - width: 60px; - height: 60px; -} -.hair_base_14_winternight { - background-image: url(spritesmith-main-2.png); - background-position: -364px -728px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_14_winternight { - background-image: url(spritesmith-main-2.png); - background-position: -389px -743px; - width: 60px; - height: 60px; -} -.hair_base_14_winterstar { - background-image: url(spritesmith-main-2.png); - background-position: -455px -728px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_14_winterstar { - background-image: url(spritesmith-main-2.png); - background-position: -480px -743px; - width: 60px; - height: 60px; -} -.hair_base_14_yellow { - background-image: url(spritesmith-main-2.png); - background-position: -546px -728px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_14_yellow { - background-image: url(spritesmith-main-2.png); - background-position: -571px -743px; - width: 60px; - height: 60px; -} -.hair_base_14_zombie { - background-image: url(spritesmith-main-2.png); - background-position: -637px -728px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_14_zombie { - background-image: url(spritesmith-main-2.png); - background-position: -662px -743px; - width: 60px; - height: 60px; -} -.hair_base_2_TRUred { - background-image: url(spritesmith-main-2.png); - background-position: -273px -910px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_2_TRUred { - background-image: url(spritesmith-main-2.png); - background-position: -298px -925px; - width: 60px; - height: 60px; -} -.hair_base_2_aurora { - background-image: url(spritesmith-main-2.png); - background-position: -728px -728px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_2_aurora { - background-image: url(spritesmith-main-2.png); - background-position: -753px -743px; - width: 60px; - height: 60px; -} -.hair_base_2_black { +.hair_base_14_TRUred { background-image: url(spritesmith-main-2.png); background-position: -819px 0px; width: 90px; height: 90px; } -.customize-option.hair_base_2_black { +.customize-option.hair_base_14_TRUred { background-image: url(spritesmith-main-2.png); background-position: -844px -15px; width: 60px; height: 60px; } -.hair_base_2_blond { +.hair_base_14_aurora { + background-image: url(spritesmith-main-2.png); + background-position: -546px -546px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_14_aurora { + background-image: url(spritesmith-main-2.png); + background-position: -571px -561px; + width: 60px; + height: 60px; +} +.hair_base_14_black { + background-image: url(spritesmith-main-2.png); + background-position: -637px 0px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_14_black { + background-image: url(spritesmith-main-2.png); + background-position: -662px -15px; + width: 60px; + height: 60px; +} +.hair_base_14_blond { + background-image: url(spritesmith-main-2.png); + background-position: -637px -91px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_14_blond { + background-image: url(spritesmith-main-2.png); + background-position: -662px -106px; + width: 60px; + height: 60px; +} +.hair_base_14_blue { + background-image: url(spritesmith-main-2.png); + background-position: -637px -182px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_14_blue { + background-image: url(spritesmith-main-2.png); + background-position: -662px -197px; + width: 60px; + height: 60px; +} +.hair_base_14_brown { + background-image: url(spritesmith-main-2.png); + background-position: -637px -273px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_14_brown { + background-image: url(spritesmith-main-2.png); + background-position: -662px -288px; + width: 60px; + height: 60px; +} +.hair_base_14_candycane { + background-image: url(spritesmith-main-2.png); + background-position: -637px -364px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_14_candycane { + background-image: url(spritesmith-main-2.png); + background-position: -662px -379px; + width: 60px; + height: 60px; +} +.hair_base_14_candycorn { + background-image: url(spritesmith-main-2.png); + background-position: -637px -455px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_14_candycorn { + background-image: url(spritesmith-main-2.png); + background-position: -662px -470px; + width: 60px; + height: 60px; +} +.hair_base_14_festive { + background-image: url(spritesmith-main-2.png); + background-position: -637px -546px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_14_festive { + background-image: url(spritesmith-main-2.png); + background-position: -662px -561px; + width: 60px; + height: 60px; +} +.hair_base_14_frost { + background-image: url(spritesmith-main-2.png); + background-position: 0px -637px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_14_frost { + background-image: url(spritesmith-main-2.png); + background-position: -25px -652px; + width: 60px; + height: 60px; +} +.hair_base_14_ghostwhite { + background-image: url(spritesmith-main-2.png); + background-position: -91px -637px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_14_ghostwhite { + background-image: url(spritesmith-main-2.png); + background-position: -116px -652px; + width: 60px; + height: 60px; +} +.hair_base_14_green { + background-image: url(spritesmith-main-2.png); + background-position: -182px -637px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_14_green { + background-image: url(spritesmith-main-2.png); + background-position: -207px -652px; + width: 60px; + height: 60px; +} +.hair_base_14_halloween { + background-image: url(spritesmith-main-2.png); + background-position: -273px -637px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_14_halloween { + background-image: url(spritesmith-main-2.png); + background-position: -298px -652px; + width: 60px; + height: 60px; +} +.hair_base_14_holly { + background-image: url(spritesmith-main-2.png); + background-position: -364px -637px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_14_holly { + background-image: url(spritesmith-main-2.png); + background-position: -389px -652px; + width: 60px; + height: 60px; +} +.hair_base_14_hollygreen { + background-image: url(spritesmith-main-2.png); + background-position: -455px -637px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_14_hollygreen { + background-image: url(spritesmith-main-2.png); + background-position: -480px -652px; + width: 60px; + height: 60px; +} +.hair_base_14_midnight { + background-image: url(spritesmith-main-2.png); + background-position: -546px -637px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_14_midnight { + background-image: url(spritesmith-main-2.png); + background-position: -571px -652px; + width: 60px; + height: 60px; +} +.hair_base_14_pblue { + background-image: url(spritesmith-main-2.png); + background-position: -637px -637px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_14_pblue { + background-image: url(spritesmith-main-2.png); + background-position: -662px -652px; + width: 60px; + height: 60px; +} +.hair_base_14_pblue2 { + background-image: url(spritesmith-main-2.png); + background-position: -728px 0px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_14_pblue2 { + background-image: url(spritesmith-main-2.png); + background-position: -753px -15px; + width: 60px; + height: 60px; +} +.hair_base_14_peppermint { + background-image: url(spritesmith-main-2.png); + background-position: -728px -91px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_14_peppermint { + background-image: url(spritesmith-main-2.png); + background-position: -753px -106px; + width: 60px; + height: 60px; +} +.hair_base_14_pgreen { + background-image: url(spritesmith-main-2.png); + background-position: -728px -182px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_14_pgreen { + background-image: url(spritesmith-main-2.png); + background-position: -753px -197px; + width: 60px; + height: 60px; +} +.hair_base_14_pgreen2 { + background-image: url(spritesmith-main-2.png); + background-position: -728px -273px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_14_pgreen2 { + background-image: url(spritesmith-main-2.png); + background-position: -753px -288px; + width: 60px; + height: 60px; +} +.hair_base_14_porange { + background-image: url(spritesmith-main-2.png); + background-position: -728px -364px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_14_porange { + background-image: url(spritesmith-main-2.png); + background-position: -753px -379px; + width: 60px; + height: 60px; +} +.hair_base_14_porange2 { + background-image: url(spritesmith-main-2.png); + background-position: -728px -455px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_14_porange2 { + background-image: url(spritesmith-main-2.png); + background-position: -753px -470px; + width: 60px; + height: 60px; +} +.hair_base_14_ppink { + background-image: url(spritesmith-main-2.png); + background-position: -728px -546px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_14_ppink { + background-image: url(spritesmith-main-2.png); + background-position: -753px -561px; + width: 60px; + height: 60px; +} +.hair_base_14_ppink2 { + background-image: url(spritesmith-main-2.png); + background-position: -728px -637px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_14_ppink2 { + background-image: url(spritesmith-main-2.png); + background-position: -753px -652px; + width: 60px; + height: 60px; +} +.hair_base_14_ppurple { + background-image: url(spritesmith-main-2.png); + background-position: 0px -728px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_14_ppurple { + background-image: url(spritesmith-main-2.png); + background-position: -25px -743px; + width: 60px; + height: 60px; +} +.hair_base_14_ppurple2 { + background-image: url(spritesmith-main-2.png); + background-position: -91px -728px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_14_ppurple2 { + background-image: url(spritesmith-main-2.png); + background-position: -116px -743px; + width: 60px; + height: 60px; +} +.hair_base_14_pumpkin { + background-image: url(spritesmith-main-2.png); + background-position: -182px -728px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_14_pumpkin { + background-image: url(spritesmith-main-2.png); + background-position: -207px -743px; + width: 60px; + height: 60px; +} +.hair_base_14_purple { + background-image: url(spritesmith-main-2.png); + background-position: -273px -728px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_14_purple { + background-image: url(spritesmith-main-2.png); + background-position: -298px -743px; + width: 60px; + height: 60px; +} +.hair_base_14_pyellow { + background-image: url(spritesmith-main-2.png); + background-position: -364px -728px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_14_pyellow { + background-image: url(spritesmith-main-2.png); + background-position: -389px -743px; + width: 60px; + height: 60px; +} +.hair_base_14_pyellow2 { + background-image: url(spritesmith-main-2.png); + background-position: -455px -728px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_14_pyellow2 { + background-image: url(spritesmith-main-2.png); + background-position: -480px -743px; + width: 60px; + height: 60px; +} +.hair_base_14_rainbow { + background-image: url(spritesmith-main-2.png); + background-position: -546px -728px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_14_rainbow { + background-image: url(spritesmith-main-2.png); + background-position: -571px -743px; + width: 60px; + height: 60px; +} +.hair_base_14_red { + background-image: url(spritesmith-main-2.png); + background-position: -637px -728px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_14_red { + background-image: url(spritesmith-main-2.png); + background-position: -662px -743px; + width: 60px; + height: 60px; +} +.hair_base_14_snowy { + background-image: url(spritesmith-main-2.png); + background-position: -728px -728px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_14_snowy { + background-image: url(spritesmith-main-2.png); + background-position: -753px -743px; + width: 60px; + height: 60px; +} +.hair_base_14_white { background-image: url(spritesmith-main-2.png); background-position: -819px -91px; width: 90px; height: 90px; } -.customize-option.hair_base_2_blond { +.customize-option.hair_base_14_white { background-image: url(spritesmith-main-2.png); background-position: -844px -106px; width: 60px; height: 60px; } -.hair_base_2_blue { +.hair_base_14_winternight { background-image: url(spritesmith-main-2.png); background-position: -819px -182px; width: 90px; height: 90px; } -.customize-option.hair_base_2_blue { +.customize-option.hair_base_14_winternight { background-image: url(spritesmith-main-2.png); background-position: -844px -197px; width: 60px; height: 60px; } -.hair_base_2_brown { +.hair_base_14_winterstar { background-image: url(spritesmith-main-2.png); background-position: -819px -273px; width: 90px; height: 90px; } -.customize-option.hair_base_2_brown { +.customize-option.hair_base_14_winterstar { background-image: url(spritesmith-main-2.png); background-position: -844px -288px; width: 60px; height: 60px; } -.hair_base_2_candycane { +.hair_base_14_yellow { background-image: url(spritesmith-main-2.png); background-position: -819px -364px; width: 90px; height: 90px; } -.customize-option.hair_base_2_candycane { +.customize-option.hair_base_14_yellow { background-image: url(spritesmith-main-2.png); background-position: -844px -379px; width: 60px; height: 60px; } -.hair_base_2_candycorn { +.hair_base_14_zombie { background-image: url(spritesmith-main-2.png); background-position: -819px -455px; width: 90px; height: 90px; } -.customize-option.hair_base_2_candycorn { +.customize-option.hair_base_14_zombie { background-image: url(spritesmith-main-2.png); background-position: -844px -470px; width: 60px; height: 60px; } -.hair_base_2_festive { - background-image: url(spritesmith-main-2.png); - background-position: -819px -546px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_2_festive { - background-image: url(spritesmith-main-2.png); - background-position: -844px -561px; - width: 60px; - height: 60px; -} -.hair_base_2_frost { - background-image: url(spritesmith-main-2.png); - background-position: -819px -637px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_2_frost { - background-image: url(spritesmith-main-2.png); - background-position: -844px -652px; - width: 60px; - height: 60px; -} -.hair_base_2_ghostwhite { - background-image: url(spritesmith-main-2.png); - background-position: -819px -728px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_2_ghostwhite { - background-image: url(spritesmith-main-2.png); - background-position: -844px -743px; - width: 60px; - height: 60px; -} -.hair_base_2_green { - background-image: url(spritesmith-main-2.png); - background-position: 0px -819px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_2_green { - background-image: url(spritesmith-main-2.png); - background-position: -25px -834px; - width: 60px; - height: 60px; -} -.hair_base_2_halloween { - background-image: url(spritesmith-main-2.png); - background-position: -91px -819px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_2_halloween { - background-image: url(spritesmith-main-2.png); - background-position: -116px -834px; - width: 60px; - height: 60px; -} -.hair_base_2_holly { - background-image: url(spritesmith-main-2.png); - background-position: -182px -819px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_2_holly { - background-image: url(spritesmith-main-2.png); - background-position: -207px -834px; - width: 60px; - height: 60px; -} -.hair_base_2_hollygreen { - background-image: url(spritesmith-main-2.png); - background-position: -273px -819px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_2_hollygreen { - background-image: url(spritesmith-main-2.png); - background-position: -298px -834px; - width: 60px; - height: 60px; -} -.hair_base_2_midnight { - background-image: url(spritesmith-main-2.png); - background-position: -364px -819px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_2_midnight { - background-image: url(spritesmith-main-2.png); - background-position: -389px -834px; - width: 60px; - height: 60px; -} -.hair_base_2_pblue { - background-image: url(spritesmith-main-2.png); - background-position: -455px -819px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_2_pblue { - background-image: url(spritesmith-main-2.png); - background-position: -480px -834px; - width: 60px; - height: 60px; -} -.hair_base_2_pblue2 { - background-image: url(spritesmith-main-2.png); - background-position: -546px -819px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_2_pblue2 { - background-image: url(spritesmith-main-2.png); - background-position: -571px -834px; - width: 60px; - height: 60px; -} -.hair_base_2_peppermint { - background-image: url(spritesmith-main-2.png); - background-position: -637px -819px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_2_peppermint { - background-image: url(spritesmith-main-2.png); - background-position: -662px -834px; - width: 60px; - height: 60px; -} -.hair_base_2_pgreen { - background-image: url(spritesmith-main-2.png); - background-position: -728px -819px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_2_pgreen { - background-image: url(spritesmith-main-2.png); - background-position: -753px -834px; - width: 60px; - height: 60px; -} -.hair_base_2_pgreen2 { - background-image: url(spritesmith-main-2.png); - background-position: -819px -819px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_2_pgreen2 { - background-image: url(spritesmith-main-2.png); - background-position: -844px -834px; - width: 60px; - height: 60px; -} -.hair_base_2_porange { - background-image: url(spritesmith-main-2.png); - background-position: -910px 0px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_2_porange { - background-image: url(spritesmith-main-2.png); - background-position: -935px -15px; - width: 60px; - height: 60px; -} -.hair_base_2_porange2 { - background-image: url(spritesmith-main-2.png); - background-position: -910px -91px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_2_porange2 { - background-image: url(spritesmith-main-2.png); - background-position: -935px -106px; - width: 60px; - height: 60px; -} -.hair_base_2_ppink { - background-image: url(spritesmith-main-2.png); - background-position: -910px -182px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_2_ppink { - background-image: url(spritesmith-main-2.png); - background-position: -935px -197px; - width: 60px; - height: 60px; -} -.hair_base_2_ppink2 { - background-image: url(spritesmith-main-2.png); - background-position: -910px -273px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_2_ppink2 { - background-image: url(spritesmith-main-2.png); - background-position: -935px -288px; - width: 60px; - height: 60px; -} -.hair_base_2_ppurple { - background-image: url(spritesmith-main-2.png); - background-position: -910px -364px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_2_ppurple { - background-image: url(spritesmith-main-2.png); - background-position: -935px -379px; - width: 60px; - height: 60px; -} -.hair_base_2_ppurple2 { - background-image: url(spritesmith-main-2.png); - background-position: -910px -455px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_2_ppurple2 { - background-image: url(spritesmith-main-2.png); - background-position: -935px -470px; - width: 60px; - height: 60px; -} -.hair_base_2_pumpkin { - background-image: url(spritesmith-main-2.png); - background-position: -910px -546px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_2_pumpkin { - background-image: url(spritesmith-main-2.png); - background-position: -935px -561px; - width: 60px; - height: 60px; -} -.hair_base_2_purple { - background-image: url(spritesmith-main-2.png); - background-position: -910px -637px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_2_purple { - background-image: url(spritesmith-main-2.png); - background-position: -935px -652px; - width: 60px; - height: 60px; -} -.hair_base_2_pyellow { - background-image: url(spritesmith-main-2.png); - background-position: -910px -728px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_2_pyellow { - background-image: url(spritesmith-main-2.png); - background-position: -935px -743px; - width: 60px; - height: 60px; -} -.hair_base_2_pyellow2 { - background-image: url(spritesmith-main-2.png); - background-position: -910px -819px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_2_pyellow2 { - background-image: url(spritesmith-main-2.png); - background-position: -935px -834px; - width: 60px; - height: 60px; -} -.hair_base_2_rainbow { - background-image: url(spritesmith-main-2.png); - background-position: 0px -910px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_2_rainbow { - background-image: url(spritesmith-main-2.png); - background-position: -25px -925px; - width: 60px; - height: 60px; -} -.hair_base_2_red { - background-image: url(spritesmith-main-2.png); - background-position: -91px -910px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_2_red { - background-image: url(spritesmith-main-2.png); - background-position: -116px -925px; - width: 60px; - height: 60px; -} -.hair_base_2_snowy { - background-image: url(spritesmith-main-2.png); - background-position: -182px -910px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_2_snowy { - background-image: url(spritesmith-main-2.png); - background-position: -207px -925px; - width: 60px; - height: 60px; -} -.hair_base_2_white { - background-image: url(spritesmith-main-2.png); - background-position: -364px -910px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_2_white { - background-image: url(spritesmith-main-2.png); - background-position: -389px -925px; - width: 60px; - height: 60px; -} -.hair_base_2_winternight { - background-image: url(spritesmith-main-2.png); - background-position: -455px -910px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_2_winternight { - background-image: url(spritesmith-main-2.png); - background-position: -480px -925px; - width: 60px; - height: 60px; -} -.hair_base_2_winterstar { - background-image: url(spritesmith-main-2.png); - background-position: -546px -910px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_2_winterstar { - background-image: url(spritesmith-main-2.png); - background-position: -571px -925px; - width: 60px; - height: 60px; -} -.hair_base_2_yellow { - background-image: url(spritesmith-main-2.png); - background-position: -637px -910px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_2_yellow { - background-image: url(spritesmith-main-2.png); - background-position: -662px -925px; - width: 60px; - height: 60px; -} -.hair_base_2_zombie { - background-image: url(spritesmith-main-2.png); - background-position: -728px -910px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_2_zombie { - background-image: url(spritesmith-main-2.png); - background-position: -753px -925px; - width: 60px; - height: 60px; -} -.hair_base_3_TRUred { - background-image: url(spritesmith-main-2.png); - background-position: -1092px -728px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_3_TRUred { - background-image: url(spritesmith-main-2.png); - background-position: -1117px -743px; - width: 60px; - height: 60px; -} -.hair_base_3_aurora { - background-image: url(spritesmith-main-2.png); - background-position: -819px -910px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_3_aurora { - background-image: url(spritesmith-main-2.png); - background-position: -844px -925px; - width: 60px; - height: 60px; -} -.hair_base_3_black { +.hair_base_2_TRUred { background-image: url(spritesmith-main-2.png); background-position: -910px -910px; width: 90px; height: 90px; } -.customize-option.hair_base_3_black { +.customize-option.hair_base_2_TRUred { background-image: url(spritesmith-main-2.png); background-position: -935px -925px; width: 60px; height: 60px; } -.hair_base_3_blond { +.hair_base_2_aurora { + background-image: url(spritesmith-main-2.png); + background-position: -819px -546px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_2_aurora { + background-image: url(spritesmith-main-2.png); + background-position: -844px -561px; + width: 60px; + height: 60px; +} +.hair_base_2_black { + background-image: url(spritesmith-main-2.png); + background-position: -819px -637px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_2_black { + background-image: url(spritesmith-main-2.png); + background-position: -844px -652px; + width: 60px; + height: 60px; +} +.hair_base_2_blond { + background-image: url(spritesmith-main-2.png); + background-position: -819px -728px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_2_blond { + background-image: url(spritesmith-main-2.png); + background-position: -844px -743px; + width: 60px; + height: 60px; +} +.hair_base_2_blue { + background-image: url(spritesmith-main-2.png); + background-position: 0px -819px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_2_blue { + background-image: url(spritesmith-main-2.png); + background-position: -25px -834px; + width: 60px; + height: 60px; +} +.hair_base_2_brown { + background-image: url(spritesmith-main-2.png); + background-position: -91px -819px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_2_brown { + background-image: url(spritesmith-main-2.png); + background-position: -116px -834px; + width: 60px; + height: 60px; +} +.hair_base_2_candycane { + background-image: url(spritesmith-main-2.png); + background-position: -182px -819px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_2_candycane { + background-image: url(spritesmith-main-2.png); + background-position: -207px -834px; + width: 60px; + height: 60px; +} +.hair_base_2_candycorn { + background-image: url(spritesmith-main-2.png); + background-position: -273px -819px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_2_candycorn { + background-image: url(spritesmith-main-2.png); + background-position: -298px -834px; + width: 60px; + height: 60px; +} +.hair_base_2_festive { + background-image: url(spritesmith-main-2.png); + background-position: -364px -819px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_2_festive { + background-image: url(spritesmith-main-2.png); + background-position: -389px -834px; + width: 60px; + height: 60px; +} +.hair_base_2_frost { + background-image: url(spritesmith-main-2.png); + background-position: -455px -819px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_2_frost { + background-image: url(spritesmith-main-2.png); + background-position: -480px -834px; + width: 60px; + height: 60px; +} +.hair_base_2_ghostwhite { + background-image: url(spritesmith-main-2.png); + background-position: -546px -819px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_2_ghostwhite { + background-image: url(spritesmith-main-2.png); + background-position: -571px -834px; + width: 60px; + height: 60px; +} +.hair_base_2_green { + background-image: url(spritesmith-main-2.png); + background-position: -637px -819px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_2_green { + background-image: url(spritesmith-main-2.png); + background-position: -662px -834px; + width: 60px; + height: 60px; +} +.hair_base_2_halloween { + background-image: url(spritesmith-main-2.png); + background-position: -728px -819px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_2_halloween { + background-image: url(spritesmith-main-2.png); + background-position: -753px -834px; + width: 60px; + height: 60px; +} +.hair_base_2_holly { + background-image: url(spritesmith-main-2.png); + background-position: -819px -819px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_2_holly { + background-image: url(spritesmith-main-2.png); + background-position: -844px -834px; + width: 60px; + height: 60px; +} +.hair_base_2_hollygreen { + background-image: url(spritesmith-main-2.png); + background-position: -910px 0px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_2_hollygreen { + background-image: url(spritesmith-main-2.png); + background-position: -935px -15px; + width: 60px; + height: 60px; +} +.hair_base_2_midnight { + background-image: url(spritesmith-main-2.png); + background-position: -910px -91px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_2_midnight { + background-image: url(spritesmith-main-2.png); + background-position: -935px -106px; + width: 60px; + height: 60px; +} +.hair_base_2_pblue { + background-image: url(spritesmith-main-2.png); + background-position: -910px -182px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_2_pblue { + background-image: url(spritesmith-main-2.png); + background-position: -935px -197px; + width: 60px; + height: 60px; +} +.hair_base_2_pblue2 { + background-image: url(spritesmith-main-2.png); + background-position: -910px -273px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_2_pblue2 { + background-image: url(spritesmith-main-2.png); + background-position: -935px -288px; + width: 60px; + height: 60px; +} +.hair_base_2_peppermint { + background-image: url(spritesmith-main-2.png); + background-position: -910px -364px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_2_peppermint { + background-image: url(spritesmith-main-2.png); + background-position: -935px -379px; + width: 60px; + height: 60px; +} +.hair_base_2_pgreen { + background-image: url(spritesmith-main-2.png); + background-position: -910px -455px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_2_pgreen { + background-image: url(spritesmith-main-2.png); + background-position: -935px -470px; + width: 60px; + height: 60px; +} +.hair_base_2_pgreen2 { + background-image: url(spritesmith-main-2.png); + background-position: -910px -546px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_2_pgreen2 { + background-image: url(spritesmith-main-2.png); + background-position: -935px -561px; + width: 60px; + height: 60px; +} +.hair_base_2_porange { + background-image: url(spritesmith-main-2.png); + background-position: -910px -637px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_2_porange { + background-image: url(spritesmith-main-2.png); + background-position: -935px -652px; + width: 60px; + height: 60px; +} +.hair_base_2_porange2 { + background-image: url(spritesmith-main-2.png); + background-position: -910px -728px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_2_porange2 { + background-image: url(spritesmith-main-2.png); + background-position: -935px -743px; + width: 60px; + height: 60px; +} +.hair_base_2_ppink { + background-image: url(spritesmith-main-2.png); + background-position: -910px -819px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_2_ppink { + background-image: url(spritesmith-main-2.png); + background-position: -935px -834px; + width: 60px; + height: 60px; +} +.hair_base_2_ppink2 { + background-image: url(spritesmith-main-2.png); + background-position: 0px -910px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_2_ppink2 { + background-image: url(spritesmith-main-2.png); + background-position: -25px -925px; + width: 60px; + height: 60px; +} +.hair_base_2_ppurple { + background-image: url(spritesmith-main-2.png); + background-position: -91px -910px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_2_ppurple { + background-image: url(spritesmith-main-2.png); + background-position: -116px -925px; + width: 60px; + height: 60px; +} +.hair_base_2_ppurple2 { + background-image: url(spritesmith-main-2.png); + background-position: -182px -910px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_2_ppurple2 { + background-image: url(spritesmith-main-2.png); + background-position: -207px -925px; + width: 60px; + height: 60px; +} +.hair_base_2_pumpkin { + background-image: url(spritesmith-main-2.png); + background-position: -273px -910px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_2_pumpkin { + background-image: url(spritesmith-main-2.png); + background-position: -298px -925px; + width: 60px; + height: 60px; +} +.hair_base_2_purple { + background-image: url(spritesmith-main-2.png); + background-position: -364px -910px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_2_purple { + background-image: url(spritesmith-main-2.png); + background-position: -389px -925px; + width: 60px; + height: 60px; +} +.hair_base_2_pyellow { + background-image: url(spritesmith-main-2.png); + background-position: -455px -910px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_2_pyellow { + background-image: url(spritesmith-main-2.png); + background-position: -480px -925px; + width: 60px; + height: 60px; +} +.hair_base_2_pyellow2 { + background-image: url(spritesmith-main-2.png); + background-position: -546px -910px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_2_pyellow2 { + background-image: url(spritesmith-main-2.png); + background-position: -571px -925px; + width: 60px; + height: 60px; +} +.hair_base_2_rainbow { + background-image: url(spritesmith-main-2.png); + background-position: -637px -910px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_2_rainbow { + background-image: url(spritesmith-main-2.png); + background-position: -662px -925px; + width: 60px; + height: 60px; +} +.hair_base_2_red { + background-image: url(spritesmith-main-2.png); + background-position: -728px -910px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_2_red { + background-image: url(spritesmith-main-2.png); + background-position: -753px -925px; + width: 60px; + height: 60px; +} +.hair_base_2_snowy { + background-image: url(spritesmith-main-2.png); + background-position: -819px -910px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_2_snowy { + background-image: url(spritesmith-main-2.png); + background-position: -844px -925px; + width: 60px; + height: 60px; +} +.hair_base_2_white { background-image: url(spritesmith-main-2.png); background-position: -1001px 0px; width: 90px; height: 90px; } -.customize-option.hair_base_3_blond { +.customize-option.hair_base_2_white { background-image: url(spritesmith-main-2.png); background-position: -1026px -15px; width: 60px; height: 60px; } -.hair_base_3_blue { +.hair_base_2_winternight { background-image: url(spritesmith-main-2.png); background-position: -1001px -91px; width: 90px; height: 90px; } -.customize-option.hair_base_3_blue { +.customize-option.hair_base_2_winternight { background-image: url(spritesmith-main-2.png); background-position: -1026px -106px; width: 60px; height: 60px; } -.hair_base_3_brown { +.hair_base_2_winterstar { background-image: url(spritesmith-main-2.png); background-position: -1001px -182px; width: 90px; height: 90px; } -.customize-option.hair_base_3_brown { +.customize-option.hair_base_2_winterstar { background-image: url(spritesmith-main-2.png); background-position: -1026px -197px; width: 60px; height: 60px; } -.hair_base_3_candycane { +.hair_base_2_yellow { background-image: url(spritesmith-main-2.png); background-position: -1001px -273px; width: 90px; height: 90px; } -.customize-option.hair_base_3_candycane { +.customize-option.hair_base_2_yellow { background-image: url(spritesmith-main-2.png); background-position: -1026px -288px; width: 60px; height: 60px; } -.hair_base_3_candycorn { +.hair_base_2_zombie { background-image: url(spritesmith-main-2.png); background-position: -1001px -364px; width: 90px; height: 90px; } -.customize-option.hair_base_3_candycorn { +.customize-option.hair_base_2_zombie { background-image: url(spritesmith-main-2.png); background-position: -1026px -379px; width: 60px; height: 60px; } -.hair_base_3_festive { - background-image: url(spritesmith-main-2.png); - background-position: -1001px -455px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_3_festive { - background-image: url(spritesmith-main-2.png); - background-position: -1026px -470px; - width: 60px; - height: 60px; -} -.hair_base_3_frost { - background-image: url(spritesmith-main-2.png); - background-position: -1001px -546px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_3_frost { - background-image: url(spritesmith-main-2.png); - background-position: -1026px -561px; - width: 60px; - height: 60px; -} -.hair_base_3_ghostwhite { - background-image: url(spritesmith-main-2.png); - background-position: -1001px -637px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_3_ghostwhite { - background-image: url(spritesmith-main-2.png); - background-position: -1026px -652px; - width: 60px; - height: 60px; -} -.hair_base_3_green { - background-image: url(spritesmith-main-2.png); - background-position: -1001px -728px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_3_green { - background-image: url(spritesmith-main-2.png); - background-position: -1026px -743px; - width: 60px; - height: 60px; -} -.hair_base_3_halloween { - background-image: url(spritesmith-main-2.png); - background-position: -1001px -819px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_3_halloween { - background-image: url(spritesmith-main-2.png); - background-position: -1026px -834px; - width: 60px; - height: 60px; -} -.hair_base_3_holly { - background-image: url(spritesmith-main-2.png); - background-position: -1001px -910px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_3_holly { - background-image: url(spritesmith-main-2.png); - background-position: -1026px -925px; - width: 60px; - height: 60px; -} -.hair_base_3_hollygreen { - background-image: url(spritesmith-main-2.png); - background-position: 0px -1001px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_3_hollygreen { - background-image: url(spritesmith-main-2.png); - background-position: -25px -1016px; - width: 60px; - height: 60px; -} -.hair_base_3_midnight { - background-image: url(spritesmith-main-2.png); - background-position: -91px -1001px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_3_midnight { - background-image: url(spritesmith-main-2.png); - background-position: -116px -1016px; - width: 60px; - height: 60px; -} -.hair_base_3_pblue { - background-image: url(spritesmith-main-2.png); - background-position: -182px -1001px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_3_pblue { - background-image: url(spritesmith-main-2.png); - background-position: -207px -1016px; - width: 60px; - height: 60px; -} -.hair_base_3_pblue2 { - background-image: url(spritesmith-main-2.png); - background-position: -273px -1001px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_3_pblue2 { - background-image: url(spritesmith-main-2.png); - background-position: -298px -1016px; - width: 60px; - height: 60px; -} -.hair_base_3_peppermint { - background-image: url(spritesmith-main-2.png); - background-position: -364px -1001px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_3_peppermint { - background-image: url(spritesmith-main-2.png); - background-position: -389px -1016px; - width: 60px; - height: 60px; -} -.hair_base_3_pgreen { - background-image: url(spritesmith-main-2.png); - background-position: -455px -1001px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_3_pgreen { - background-image: url(spritesmith-main-2.png); - background-position: -480px -1016px; - width: 60px; - height: 60px; -} -.hair_base_3_pgreen2 { - background-image: url(spritesmith-main-2.png); - background-position: -546px -1001px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_3_pgreen2 { - background-image: url(spritesmith-main-2.png); - background-position: -571px -1016px; - width: 60px; - height: 60px; -} -.hair_base_3_porange { - background-image: url(spritesmith-main-2.png); - background-position: -637px -1001px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_3_porange { - background-image: url(spritesmith-main-2.png); - background-position: -662px -1016px; - width: 60px; - height: 60px; -} -.hair_base_3_porange2 { - background-image: url(spritesmith-main-2.png); - background-position: -728px -1001px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_3_porange2 { - background-image: url(spritesmith-main-2.png); - background-position: -753px -1016px; - width: 60px; - height: 60px; -} -.hair_base_3_ppink { - background-image: url(spritesmith-main-2.png); - background-position: -819px -1001px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_3_ppink { - background-image: url(spritesmith-main-2.png); - background-position: -844px -1016px; - width: 60px; - height: 60px; -} -.hair_base_3_ppink2 { - background-image: url(spritesmith-main-2.png); - background-position: -910px -1001px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_3_ppink2 { - background-image: url(spritesmith-main-2.png); - background-position: -935px -1016px; - width: 60px; - height: 60px; -} -.hair_base_3_ppurple { - background-image: url(spritesmith-main-2.png); - background-position: -1001px -1001px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_3_ppurple { - background-image: url(spritesmith-main-2.png); - background-position: -1026px -1016px; - width: 60px; - height: 60px; -} -.hair_base_3_ppurple2 { - background-image: url(spritesmith-main-2.png); - background-position: -1092px 0px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_3_ppurple2 { - background-image: url(spritesmith-main-2.png); - background-position: -1117px -15px; - width: 60px; - height: 60px; -} -.hair_base_3_pumpkin { - background-image: url(spritesmith-main-2.png); - background-position: -1092px -91px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_3_pumpkin { - background-image: url(spritesmith-main-2.png); - background-position: -1117px -106px; - width: 60px; - height: 60px; -} -.hair_base_3_purple { - background-image: url(spritesmith-main-2.png); - background-position: -1092px -182px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_3_purple { - background-image: url(spritesmith-main-2.png); - background-position: -1117px -197px; - width: 60px; - height: 60px; -} -.hair_base_3_pyellow { - background-image: url(spritesmith-main-2.png); - background-position: -1092px -273px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_3_pyellow { - background-image: url(spritesmith-main-2.png); - background-position: -1117px -288px; - width: 60px; - height: 60px; -} -.hair_base_3_pyellow2 { - background-image: url(spritesmith-main-2.png); - background-position: -1092px -364px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_3_pyellow2 { - background-image: url(spritesmith-main-2.png); - background-position: -1117px -379px; - width: 60px; - height: 60px; -} -.hair_base_3_rainbow { - background-image: url(spritesmith-main-2.png); - background-position: -1092px -455px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_3_rainbow { - background-image: url(spritesmith-main-2.png); - background-position: -1117px -470px; - width: 60px; - height: 60px; -} -.hair_base_3_red { - background-image: url(spritesmith-main-2.png); - background-position: -1092px -546px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_3_red { - background-image: url(spritesmith-main-2.png); - background-position: -1117px -561px; - width: 60px; - height: 60px; -} -.hair_base_3_snowy { - background-image: url(spritesmith-main-2.png); - background-position: -1092px -637px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_3_snowy { - background-image: url(spritesmith-main-2.png); - background-position: -1117px -652px; - width: 60px; - height: 60px; -} -.hair_base_3_white { - background-image: url(spritesmith-main-2.png); - background-position: -1092px -819px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_3_white { - background-image: url(spritesmith-main-2.png); - background-position: -1117px -834px; - width: 60px; - height: 60px; -} -.hair_base_3_winternight { - background-image: url(spritesmith-main-2.png); - background-position: -1092px -910px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_3_winternight { - background-image: url(spritesmith-main-2.png); - background-position: -1117px -925px; - width: 60px; - height: 60px; -} -.hair_base_3_winterstar { - background-image: url(spritesmith-main-2.png); - background-position: -1092px -1001px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_3_winterstar { - background-image: url(spritesmith-main-2.png); - background-position: -1117px -1016px; - width: 60px; - height: 60px; -} -.hair_base_3_yellow { - background-image: url(spritesmith-main-2.png); - background-position: 0px -1092px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_3_yellow { - background-image: url(spritesmith-main-2.png); - background-position: -25px -1107px; - width: 60px; - height: 60px; -} -.hair_base_3_zombie { - background-image: url(spritesmith-main-2.png); - background-position: -91px -1092px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_3_zombie { - background-image: url(spritesmith-main-2.png); - background-position: -116px -1107px; - width: 60px; - height: 60px; -} -.hair_base_4_TRUred { - background-image: url(spritesmith-main-2.png); - background-position: -819px -1183px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_4_TRUred { - background-image: url(spritesmith-main-2.png); - background-position: -844px -1198px; - width: 60px; - height: 60px; -} -.hair_base_4_aurora { - background-image: url(spritesmith-main-2.png); - background-position: -182px -1092px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_4_aurora { - background-image: url(spritesmith-main-2.png); - background-position: -207px -1107px; - width: 60px; - height: 60px; -} -.hair_base_4_black { +.hair_base_3_TRUred { background-image: url(spritesmith-main-2.png); background-position: -273px -1092px; width: 90px; height: 90px; } -.customize-option.hair_base_4_black { +.customize-option.hair_base_3_TRUred { background-image: url(spritesmith-main-2.png); background-position: -298px -1107px; width: 60px; height: 60px; } -.hair_base_4_blond { +.hair_base_3_aurora { + background-image: url(spritesmith-main-2.png); + background-position: -1001px -455px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_3_aurora { + background-image: url(spritesmith-main-2.png); + background-position: -1026px -470px; + width: 60px; + height: 60px; +} +.hair_base_3_black { + background-image: url(spritesmith-main-2.png); + background-position: -1001px -546px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_3_black { + background-image: url(spritesmith-main-2.png); + background-position: -1026px -561px; + width: 60px; + height: 60px; +} +.hair_base_3_blond { + background-image: url(spritesmith-main-2.png); + background-position: -1001px -637px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_3_blond { + background-image: url(spritesmith-main-2.png); + background-position: -1026px -652px; + width: 60px; + height: 60px; +} +.hair_base_3_blue { + background-image: url(spritesmith-main-2.png); + background-position: -1001px -728px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_3_blue { + background-image: url(spritesmith-main-2.png); + background-position: -1026px -743px; + width: 60px; + height: 60px; +} +.hair_base_3_brown { + background-image: url(spritesmith-main-2.png); + background-position: -1001px -819px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_3_brown { + background-image: url(spritesmith-main-2.png); + background-position: -1026px -834px; + width: 60px; + height: 60px; +} +.hair_base_3_candycane { + background-image: url(spritesmith-main-2.png); + background-position: -1001px -910px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_3_candycane { + background-image: url(spritesmith-main-2.png); + background-position: -1026px -925px; + width: 60px; + height: 60px; +} +.hair_base_3_candycorn { + background-image: url(spritesmith-main-2.png); + background-position: 0px -1001px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_3_candycorn { + background-image: url(spritesmith-main-2.png); + background-position: -25px -1016px; + width: 60px; + height: 60px; +} +.hair_base_3_festive { + background-image: url(spritesmith-main-2.png); + background-position: -91px -1001px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_3_festive { + background-image: url(spritesmith-main-2.png); + background-position: -116px -1016px; + width: 60px; + height: 60px; +} +.hair_base_3_frost { + background-image: url(spritesmith-main-2.png); + background-position: -182px -1001px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_3_frost { + background-image: url(spritesmith-main-2.png); + background-position: -207px -1016px; + width: 60px; + height: 60px; +} +.hair_base_3_ghostwhite { + background-image: url(spritesmith-main-2.png); + background-position: -273px -1001px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_3_ghostwhite { + background-image: url(spritesmith-main-2.png); + background-position: -298px -1016px; + width: 60px; + height: 60px; +} +.hair_base_3_green { + background-image: url(spritesmith-main-2.png); + background-position: -364px -1001px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_3_green { + background-image: url(spritesmith-main-2.png); + background-position: -389px -1016px; + width: 60px; + height: 60px; +} +.hair_base_3_halloween { + background-image: url(spritesmith-main-2.png); + background-position: -455px -1001px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_3_halloween { + background-image: url(spritesmith-main-2.png); + background-position: -480px -1016px; + width: 60px; + height: 60px; +} +.hair_base_3_holly { + background-image: url(spritesmith-main-2.png); + background-position: -546px -1001px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_3_holly { + background-image: url(spritesmith-main-2.png); + background-position: -571px -1016px; + width: 60px; + height: 60px; +} +.hair_base_3_hollygreen { + background-image: url(spritesmith-main-2.png); + background-position: -637px -1001px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_3_hollygreen { + background-image: url(spritesmith-main-2.png); + background-position: -662px -1016px; + width: 60px; + height: 60px; +} +.hair_base_3_midnight { + background-image: url(spritesmith-main-2.png); + background-position: -728px -1001px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_3_midnight { + background-image: url(spritesmith-main-2.png); + background-position: -753px -1016px; + width: 60px; + height: 60px; +} +.hair_base_3_pblue { + background-image: url(spritesmith-main-2.png); + background-position: -819px -1001px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_3_pblue { + background-image: url(spritesmith-main-2.png); + background-position: -844px -1016px; + width: 60px; + height: 60px; +} +.hair_base_3_pblue2 { + background-image: url(spritesmith-main-2.png); + background-position: -910px -1001px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_3_pblue2 { + background-image: url(spritesmith-main-2.png); + background-position: -935px -1016px; + width: 60px; + height: 60px; +} +.hair_base_3_peppermint { + background-image: url(spritesmith-main-2.png); + background-position: -1001px -1001px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_3_peppermint { + background-image: url(spritesmith-main-2.png); + background-position: -1026px -1016px; + width: 60px; + height: 60px; +} +.hair_base_3_pgreen { + background-image: url(spritesmith-main-2.png); + background-position: -1092px 0px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_3_pgreen { + background-image: url(spritesmith-main-2.png); + background-position: -1117px -15px; + width: 60px; + height: 60px; +} +.hair_base_3_pgreen2 { + background-image: url(spritesmith-main-2.png); + background-position: -1092px -91px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_3_pgreen2 { + background-image: url(spritesmith-main-2.png); + background-position: -1117px -106px; + width: 60px; + height: 60px; +} +.hair_base_3_porange { + background-image: url(spritesmith-main-2.png); + background-position: -1092px -182px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_3_porange { + background-image: url(spritesmith-main-2.png); + background-position: -1117px -197px; + width: 60px; + height: 60px; +} +.hair_base_3_porange2 { + background-image: url(spritesmith-main-2.png); + background-position: -1092px -273px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_3_porange2 { + background-image: url(spritesmith-main-2.png); + background-position: -1117px -288px; + width: 60px; + height: 60px; +} +.hair_base_3_ppink { + background-image: url(spritesmith-main-2.png); + background-position: -1092px -364px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_3_ppink { + background-image: url(spritesmith-main-2.png); + background-position: -1117px -379px; + width: 60px; + height: 60px; +} +.hair_base_3_ppink2 { + background-image: url(spritesmith-main-2.png); + background-position: -1092px -455px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_3_ppink2 { + background-image: url(spritesmith-main-2.png); + background-position: -1117px -470px; + width: 60px; + height: 60px; +} +.hair_base_3_ppurple { + background-image: url(spritesmith-main-2.png); + background-position: -1092px -546px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_3_ppurple { + background-image: url(spritesmith-main-2.png); + background-position: -1117px -561px; + width: 60px; + height: 60px; +} +.hair_base_3_ppurple2 { + background-image: url(spritesmith-main-2.png); + background-position: -1092px -637px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_3_ppurple2 { + background-image: url(spritesmith-main-2.png); + background-position: -1117px -652px; + width: 60px; + height: 60px; +} +.hair_base_3_pumpkin { + background-image: url(spritesmith-main-2.png); + background-position: -1092px -728px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_3_pumpkin { + background-image: url(spritesmith-main-2.png); + background-position: -1117px -743px; + width: 60px; + height: 60px; +} +.hair_base_3_purple { + background-image: url(spritesmith-main-2.png); + background-position: -1092px -819px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_3_purple { + background-image: url(spritesmith-main-2.png); + background-position: -1117px -834px; + width: 60px; + height: 60px; +} +.hair_base_3_pyellow { + background-image: url(spritesmith-main-2.png); + background-position: -1092px -910px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_3_pyellow { + background-image: url(spritesmith-main-2.png); + background-position: -1117px -925px; + width: 60px; + height: 60px; +} +.hair_base_3_pyellow2 { + background-image: url(spritesmith-main-2.png); + background-position: -1092px -1001px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_3_pyellow2 { + background-image: url(spritesmith-main-2.png); + background-position: -1117px -1016px; + width: 60px; + height: 60px; +} +.hair_base_3_rainbow { + background-image: url(spritesmith-main-2.png); + background-position: 0px -1092px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_3_rainbow { + background-image: url(spritesmith-main-2.png); + background-position: -25px -1107px; + width: 60px; + height: 60px; +} +.hair_base_3_red { + background-image: url(spritesmith-main-2.png); + background-position: -91px -1092px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_3_red { + background-image: url(spritesmith-main-2.png); + background-position: -116px -1107px; + width: 60px; + height: 60px; +} +.hair_base_3_snowy { + background-image: url(spritesmith-main-2.png); + background-position: -182px -1092px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_3_snowy { + background-image: url(spritesmith-main-2.png); + background-position: -207px -1107px; + width: 60px; + height: 60px; +} +.hair_base_3_white { background-image: url(spritesmith-main-2.png); background-position: -364px -1092px; width: 90px; height: 90px; } -.customize-option.hair_base_4_blond { +.customize-option.hair_base_3_white { background-image: url(spritesmith-main-2.png); background-position: -389px -1107px; width: 60px; height: 60px; } -.hair_base_4_blue { +.hair_base_3_winternight { background-image: url(spritesmith-main-2.png); background-position: -455px -1092px; width: 90px; height: 90px; } -.customize-option.hair_base_4_blue { +.customize-option.hair_base_3_winternight { background-image: url(spritesmith-main-2.png); background-position: -480px -1107px; width: 60px; height: 60px; } -.hair_base_4_brown { +.hair_base_3_winterstar { background-image: url(spritesmith-main-2.png); background-position: -546px -1092px; width: 90px; height: 90px; } -.customize-option.hair_base_4_brown { +.customize-option.hair_base_3_winterstar { background-image: url(spritesmith-main-2.png); background-position: -571px -1107px; width: 60px; height: 60px; } -.hair_base_4_candycane { +.hair_base_3_yellow { background-image: url(spritesmith-main-2.png); background-position: -637px -1092px; width: 90px; height: 90px; } -.customize-option.hair_base_4_candycane { +.customize-option.hair_base_3_yellow { background-image: url(spritesmith-main-2.png); background-position: -662px -1107px; width: 60px; height: 60px; } -.hair_base_4_candycorn { +.hair_base_3_zombie { background-image: url(spritesmith-main-2.png); background-position: 0px 0px; width: 90px; height: 90px; } -.customize-option.hair_base_4_candycorn { +.customize-option.hair_base_3_zombie { background-image: url(spritesmith-main-2.png); background-position: -25px -15px; width: 60px; height: 60px; } -.hair_base_4_festive { - background-image: url(spritesmith-main-2.png); - background-position: -819px -1092px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_4_festive { - background-image: url(spritesmith-main-2.png); - background-position: -844px -1107px; - width: 60px; - height: 60px; -} -.hair_base_4_frost { - background-image: url(spritesmith-main-2.png); - background-position: -910px -1092px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_4_frost { - background-image: url(spritesmith-main-2.png); - background-position: -935px -1107px; - width: 60px; - height: 60px; -} -.hair_base_4_ghostwhite { - background-image: url(spritesmith-main-2.png); - background-position: -1001px -1092px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_4_ghostwhite { - background-image: url(spritesmith-main-2.png); - background-position: -1026px -1107px; - width: 60px; - height: 60px; -} -.hair_base_4_green { - background-image: url(spritesmith-main-2.png); - background-position: -1092px -1092px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_4_green { - background-image: url(spritesmith-main-2.png); - background-position: -1117px -1107px; - width: 60px; - height: 60px; -} -.hair_base_4_halloween { - background-image: url(spritesmith-main-2.png); - background-position: -1183px 0px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_4_halloween { - background-image: url(spritesmith-main-2.png); - background-position: -1208px -15px; - width: 60px; - height: 60px; -} -.hair_base_4_holly { - background-image: url(spritesmith-main-2.png); - background-position: -1183px -91px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_4_holly { - background-image: url(spritesmith-main-2.png); - background-position: -1208px -106px; - width: 60px; - height: 60px; -} -.hair_base_4_hollygreen { - background-image: url(spritesmith-main-2.png); - background-position: -1183px -182px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_4_hollygreen { - background-image: url(spritesmith-main-2.png); - background-position: -1208px -197px; - width: 60px; - height: 60px; -} -.hair_base_4_midnight { - background-image: url(spritesmith-main-2.png); - background-position: -1183px -273px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_4_midnight { - background-image: url(spritesmith-main-2.png); - background-position: -1208px -288px; - width: 60px; - height: 60px; -} -.hair_base_4_pblue { - background-image: url(spritesmith-main-2.png); - background-position: -1183px -364px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_4_pblue { - background-image: url(spritesmith-main-2.png); - background-position: -1208px -379px; - width: 60px; - height: 60px; -} -.hair_base_4_pblue2 { - background-image: url(spritesmith-main-2.png); - background-position: -1183px -455px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_4_pblue2 { - background-image: url(spritesmith-main-2.png); - background-position: -1208px -470px; - width: 60px; - height: 60px; -} -.hair_base_4_peppermint { - background-image: url(spritesmith-main-2.png); - background-position: -1183px -546px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_4_peppermint { - background-image: url(spritesmith-main-2.png); - background-position: -1208px -561px; - width: 60px; - height: 60px; -} -.hair_base_4_pgreen { - background-image: url(spritesmith-main-2.png); - background-position: -1183px -637px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_4_pgreen { - background-image: url(spritesmith-main-2.png); - background-position: -1208px -652px; - width: 60px; - height: 60px; -} -.hair_base_4_pgreen2 { - background-image: url(spritesmith-main-2.png); - background-position: -1183px -728px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_4_pgreen2 { - background-image: url(spritesmith-main-2.png); - background-position: -1208px -743px; - width: 60px; - height: 60px; -} -.hair_base_4_porange { - background-image: url(spritesmith-main-2.png); - background-position: -1183px -819px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_4_porange { - background-image: url(spritesmith-main-2.png); - background-position: -1208px -834px; - width: 60px; - height: 60px; -} -.hair_base_4_porange2 { - background-image: url(spritesmith-main-2.png); - background-position: -1183px -910px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_4_porange2 { - background-image: url(spritesmith-main-2.png); - background-position: -1208px -925px; - width: 60px; - height: 60px; -} -.hair_base_4_ppink { - background-image: url(spritesmith-main-2.png); - background-position: -1183px -1001px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_4_ppink { - background-image: url(spritesmith-main-2.png); - background-position: -1208px -1016px; - width: 60px; - height: 60px; -} -.hair_base_4_ppink2 { - background-image: url(spritesmith-main-2.png); - background-position: -1183px -1092px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_4_ppink2 { - background-image: url(spritesmith-main-2.png); - background-position: -1208px -1107px; - width: 60px; - height: 60px; -} -.hair_base_4_ppurple { - background-image: url(spritesmith-main-2.png); - background-position: 0px -1183px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_4_ppurple { - background-image: url(spritesmith-main-2.png); - background-position: -25px -1198px; - width: 60px; - height: 60px; -} -.hair_base_4_ppurple2 { - background-image: url(spritesmith-main-2.png); - background-position: -91px -1183px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_4_ppurple2 { - background-image: url(spritesmith-main-2.png); - background-position: -116px -1198px; - width: 60px; - height: 60px; -} -.hair_base_4_pumpkin { - background-image: url(spritesmith-main-2.png); - background-position: -182px -1183px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_4_pumpkin { - background-image: url(spritesmith-main-2.png); - background-position: -207px -1198px; - width: 60px; - height: 60px; -} -.hair_base_4_purple { - background-image: url(spritesmith-main-2.png); - background-position: -273px -1183px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_4_purple { - background-image: url(spritesmith-main-2.png); - background-position: -298px -1198px; - width: 60px; - height: 60px; -} -.hair_base_4_pyellow { - background-image: url(spritesmith-main-2.png); - background-position: -364px -1183px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_4_pyellow { - background-image: url(spritesmith-main-2.png); - background-position: -389px -1198px; - width: 60px; - height: 60px; -} -.hair_base_4_pyellow2 { - background-image: url(spritesmith-main-2.png); - background-position: -455px -1183px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_4_pyellow2 { - background-image: url(spritesmith-main-2.png); - background-position: -480px -1198px; - width: 60px; - height: 60px; -} -.hair_base_4_rainbow { - background-image: url(spritesmith-main-2.png); - background-position: -546px -1183px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_4_rainbow { - background-image: url(spritesmith-main-2.png); - background-position: -571px -1198px; - width: 60px; - height: 60px; -} -.hair_base_4_red { - background-image: url(spritesmith-main-2.png); - background-position: -637px -1183px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_4_red { - background-image: url(spritesmith-main-2.png); - background-position: -662px -1198px; - width: 60px; - height: 60px; -} -.hair_base_4_snowy { - background-image: url(spritesmith-main-2.png); - background-position: -728px -1183px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_4_snowy { - background-image: url(spritesmith-main-2.png); - background-position: -753px -1198px; - width: 60px; - height: 60px; -} -.hair_base_4_white { - background-image: url(spritesmith-main-2.png); - background-position: -910px -1183px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_4_white { - background-image: url(spritesmith-main-2.png); - background-position: -935px -1198px; - width: 60px; - height: 60px; -} -.hair_base_4_winternight { - background-image: url(spritesmith-main-2.png); - background-position: -1001px -1183px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_4_winternight { - background-image: url(spritesmith-main-2.png); - background-position: -1026px -1198px; - width: 60px; - height: 60px; -} -.hair_base_4_winterstar { - background-image: url(spritesmith-main-2.png); - background-position: -1092px -1183px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_4_winterstar { - background-image: url(spritesmith-main-2.png); - background-position: -1117px -1198px; - width: 60px; - height: 60px; -} -.hair_base_4_yellow { - background-image: url(spritesmith-main-2.png); - background-position: -1183px -1183px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_4_yellow { - background-image: url(spritesmith-main-2.png); - background-position: -1208px -1198px; - width: 60px; - height: 60px; -} -.hair_base_4_zombie { - background-image: url(spritesmith-main-2.png); - background-position: -1274px 0px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_4_zombie { - background-image: url(spritesmith-main-2.png); - background-position: -1299px -15px; - width: 60px; - height: 60px; -} -.hair_base_5_TRUred { - background-image: url(spritesmith-main-2.png); - background-position: -1365px -455px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_5_TRUred { - background-image: url(spritesmith-main-2.png); - background-position: -1390px -470px; - width: 60px; - height: 60px; -} -.hair_base_5_aurora { - background-image: url(spritesmith-main-2.png); - background-position: -1274px -91px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_5_aurora { - background-image: url(spritesmith-main-2.png); - background-position: -1299px -106px; - width: 60px; - height: 60px; -} -.hair_base_5_black { +.hair_base_4_TRUred { background-image: url(spritesmith-main-2.png); background-position: -1274px -182px; width: 90px; height: 90px; } -.customize-option.hair_base_5_black { +.customize-option.hair_base_4_TRUred { background-image: url(spritesmith-main-2.png); background-position: -1299px -197px; width: 60px; height: 60px; } -.hair_base_5_blond { +.hair_base_4_aurora { + background-image: url(spritesmith-main-2.png); + background-position: -819px -1092px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_4_aurora { + background-image: url(spritesmith-main-2.png); + background-position: -844px -1107px; + width: 60px; + height: 60px; +} +.hair_base_4_black { + background-image: url(spritesmith-main-2.png); + background-position: -910px -1092px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_4_black { + background-image: url(spritesmith-main-2.png); + background-position: -935px -1107px; + width: 60px; + height: 60px; +} +.hair_base_4_blond { + background-image: url(spritesmith-main-2.png); + background-position: -1001px -1092px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_4_blond { + background-image: url(spritesmith-main-2.png); + background-position: -1026px -1107px; + width: 60px; + height: 60px; +} +.hair_base_4_blue { + background-image: url(spritesmith-main-2.png); + background-position: -1092px -1092px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_4_blue { + background-image: url(spritesmith-main-2.png); + background-position: -1117px -1107px; + width: 60px; + height: 60px; +} +.hair_base_4_brown { + background-image: url(spritesmith-main-2.png); + background-position: -1183px 0px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_4_brown { + background-image: url(spritesmith-main-2.png); + background-position: -1208px -15px; + width: 60px; + height: 60px; +} +.hair_base_4_candycane { + background-image: url(spritesmith-main-2.png); + background-position: -1183px -91px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_4_candycane { + background-image: url(spritesmith-main-2.png); + background-position: -1208px -106px; + width: 60px; + height: 60px; +} +.hair_base_4_candycorn { + background-image: url(spritesmith-main-2.png); + background-position: -1183px -182px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_4_candycorn { + background-image: url(spritesmith-main-2.png); + background-position: -1208px -197px; + width: 60px; + height: 60px; +} +.hair_base_4_festive { + background-image: url(spritesmith-main-2.png); + background-position: -1183px -273px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_4_festive { + background-image: url(spritesmith-main-2.png); + background-position: -1208px -288px; + width: 60px; + height: 60px; +} +.hair_base_4_frost { + background-image: url(spritesmith-main-2.png); + background-position: -1183px -364px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_4_frost { + background-image: url(spritesmith-main-2.png); + background-position: -1208px -379px; + width: 60px; + height: 60px; +} +.hair_base_4_ghostwhite { + background-image: url(spritesmith-main-2.png); + background-position: -1183px -455px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_4_ghostwhite { + background-image: url(spritesmith-main-2.png); + background-position: -1208px -470px; + width: 60px; + height: 60px; +} +.hair_base_4_green { + background-image: url(spritesmith-main-2.png); + background-position: -1183px -546px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_4_green { + background-image: url(spritesmith-main-2.png); + background-position: -1208px -561px; + width: 60px; + height: 60px; +} +.hair_base_4_halloween { + background-image: url(spritesmith-main-2.png); + background-position: -1183px -637px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_4_halloween { + background-image: url(spritesmith-main-2.png); + background-position: -1208px -652px; + width: 60px; + height: 60px; +} +.hair_base_4_holly { + background-image: url(spritesmith-main-2.png); + background-position: -1183px -728px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_4_holly { + background-image: url(spritesmith-main-2.png); + background-position: -1208px -743px; + width: 60px; + height: 60px; +} +.hair_base_4_hollygreen { + background-image: url(spritesmith-main-2.png); + background-position: -1183px -819px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_4_hollygreen { + background-image: url(spritesmith-main-2.png); + background-position: -1208px -834px; + width: 60px; + height: 60px; +} +.hair_base_4_midnight { + background-image: url(spritesmith-main-2.png); + background-position: -1183px -910px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_4_midnight { + background-image: url(spritesmith-main-2.png); + background-position: -1208px -925px; + width: 60px; + height: 60px; +} +.hair_base_4_pblue { + background-image: url(spritesmith-main-2.png); + background-position: -1183px -1001px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_4_pblue { + background-image: url(spritesmith-main-2.png); + background-position: -1208px -1016px; + width: 60px; + height: 60px; +} +.hair_base_4_pblue2 { + background-image: url(spritesmith-main-2.png); + background-position: -1183px -1092px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_4_pblue2 { + background-image: url(spritesmith-main-2.png); + background-position: -1208px -1107px; + width: 60px; + height: 60px; +} +.hair_base_4_peppermint { + background-image: url(spritesmith-main-2.png); + background-position: 0px -1183px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_4_peppermint { + background-image: url(spritesmith-main-2.png); + background-position: -25px -1198px; + width: 60px; + height: 60px; +} +.hair_base_4_pgreen { + background-image: url(spritesmith-main-2.png); + background-position: -91px -1183px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_4_pgreen { + background-image: url(spritesmith-main-2.png); + background-position: -116px -1198px; + width: 60px; + height: 60px; +} +.hair_base_4_pgreen2 { + background-image: url(spritesmith-main-2.png); + background-position: -182px -1183px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_4_pgreen2 { + background-image: url(spritesmith-main-2.png); + background-position: -207px -1198px; + width: 60px; + height: 60px; +} +.hair_base_4_porange { + background-image: url(spritesmith-main-2.png); + background-position: -273px -1183px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_4_porange { + background-image: url(spritesmith-main-2.png); + background-position: -298px -1198px; + width: 60px; + height: 60px; +} +.hair_base_4_porange2 { + background-image: url(spritesmith-main-2.png); + background-position: -364px -1183px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_4_porange2 { + background-image: url(spritesmith-main-2.png); + background-position: -389px -1198px; + width: 60px; + height: 60px; +} +.hair_base_4_ppink { + background-image: url(spritesmith-main-2.png); + background-position: -455px -1183px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_4_ppink { + background-image: url(spritesmith-main-2.png); + background-position: -480px -1198px; + width: 60px; + height: 60px; +} +.hair_base_4_ppink2 { + background-image: url(spritesmith-main-2.png); + background-position: -546px -1183px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_4_ppink2 { + background-image: url(spritesmith-main-2.png); + background-position: -571px -1198px; + width: 60px; + height: 60px; +} +.hair_base_4_ppurple { + background-image: url(spritesmith-main-2.png); + background-position: -637px -1183px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_4_ppurple { + background-image: url(spritesmith-main-2.png); + background-position: -662px -1198px; + width: 60px; + height: 60px; +} +.hair_base_4_ppurple2 { + background-image: url(spritesmith-main-2.png); + background-position: -728px -1183px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_4_ppurple2 { + background-image: url(spritesmith-main-2.png); + background-position: -753px -1198px; + width: 60px; + height: 60px; +} +.hair_base_4_pumpkin { + background-image: url(spritesmith-main-2.png); + background-position: -819px -1183px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_4_pumpkin { + background-image: url(spritesmith-main-2.png); + background-position: -844px -1198px; + width: 60px; + height: 60px; +} +.hair_base_4_purple { + background-image: url(spritesmith-main-2.png); + background-position: -910px -1183px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_4_purple { + background-image: url(spritesmith-main-2.png); + background-position: -935px -1198px; + width: 60px; + height: 60px; +} +.hair_base_4_pyellow { + background-image: url(spritesmith-main-2.png); + background-position: -1001px -1183px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_4_pyellow { + background-image: url(spritesmith-main-2.png); + background-position: -1026px -1198px; + width: 60px; + height: 60px; +} +.hair_base_4_pyellow2 { + background-image: url(spritesmith-main-2.png); + background-position: -1092px -1183px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_4_pyellow2 { + background-image: url(spritesmith-main-2.png); + background-position: -1117px -1198px; + width: 60px; + height: 60px; +} +.hair_base_4_rainbow { + background-image: url(spritesmith-main-2.png); + background-position: -1183px -1183px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_4_rainbow { + background-image: url(spritesmith-main-2.png); + background-position: -1208px -1198px; + width: 60px; + height: 60px; +} +.hair_base_4_red { + background-image: url(spritesmith-main-2.png); + background-position: -1274px 0px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_4_red { + background-image: url(spritesmith-main-2.png); + background-position: -1299px -15px; + width: 60px; + height: 60px; +} +.hair_base_4_snowy { + background-image: url(spritesmith-main-2.png); + background-position: -1274px -91px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_4_snowy { + background-image: url(spritesmith-main-2.png); + background-position: -1299px -106px; + width: 60px; + height: 60px; +} +.hair_base_4_white { background-image: url(spritesmith-main-2.png); background-position: -1274px -273px; width: 90px; height: 90px; } -.customize-option.hair_base_5_blond { +.customize-option.hair_base_4_white { background-image: url(spritesmith-main-2.png); background-position: -1299px -288px; width: 60px; height: 60px; } -.hair_base_5_blue { +.hair_base_4_winternight { background-image: url(spritesmith-main-2.png); background-position: -1274px -364px; width: 90px; height: 90px; } -.customize-option.hair_base_5_blue { +.customize-option.hair_base_4_winternight { background-image: url(spritesmith-main-2.png); background-position: -1299px -379px; width: 60px; height: 60px; } -.hair_base_5_brown { +.hair_base_4_winterstar { background-image: url(spritesmith-main-2.png); background-position: -1274px -455px; width: 90px; height: 90px; } -.customize-option.hair_base_5_brown { +.customize-option.hair_base_4_winterstar { background-image: url(spritesmith-main-2.png); background-position: -1299px -470px; width: 60px; height: 60px; } -.hair_base_5_candycane { +.hair_base_4_yellow { background-image: url(spritesmith-main-2.png); background-position: -1274px -546px; width: 90px; height: 90px; } -.customize-option.hair_base_5_candycane { +.customize-option.hair_base_4_yellow { background-image: url(spritesmith-main-2.png); background-position: -1299px -561px; width: 60px; height: 60px; } -.hair_base_5_candycorn { +.hair_base_4_zombie { background-image: url(spritesmith-main-2.png); background-position: -1274px -637px; width: 90px; height: 90px; } -.customize-option.hair_base_5_candycorn { +.customize-option.hair_base_4_zombie { background-image: url(spritesmith-main-2.png); background-position: -1299px -652px; width: 60px; height: 60px; } -.hair_base_5_festive { - background-image: url(spritesmith-main-2.png); - background-position: -1274px -728px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_5_festive { - background-image: url(spritesmith-main-2.png); - background-position: -1299px -743px; - width: 60px; - height: 60px; -} -.hair_base_5_frost { - background-image: url(spritesmith-main-2.png); - background-position: -1274px -819px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_5_frost { - background-image: url(spritesmith-main-2.png); - background-position: -1299px -834px; - width: 60px; - height: 60px; -} -.hair_base_5_ghostwhite { - background-image: url(spritesmith-main-2.png); - background-position: -1274px -910px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_5_ghostwhite { - background-image: url(spritesmith-main-2.png); - background-position: -1299px -925px; - width: 60px; - height: 60px; -} -.hair_base_5_green { - background-image: url(spritesmith-main-2.png); - background-position: -1274px -1001px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_5_green { - background-image: url(spritesmith-main-2.png); - background-position: -1299px -1016px; - width: 60px; - height: 60px; -} -.hair_base_5_halloween { - background-image: url(spritesmith-main-2.png); - background-position: -1274px -1092px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_5_halloween { - background-image: url(spritesmith-main-2.png); - background-position: -1299px -1107px; - width: 60px; - height: 60px; -} -.hair_base_5_holly { - background-image: url(spritesmith-main-2.png); - background-position: -1274px -1183px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_5_holly { - background-image: url(spritesmith-main-2.png); - background-position: -1299px -1198px; - width: 60px; - height: 60px; -} -.hair_base_5_hollygreen { - background-image: url(spritesmith-main-2.png); - background-position: 0px -1274px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_5_hollygreen { - background-image: url(spritesmith-main-2.png); - background-position: -25px -1289px; - width: 60px; - height: 60px; -} -.hair_base_5_midnight { - background-image: url(spritesmith-main-2.png); - background-position: -91px -1274px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_5_midnight { - background-image: url(spritesmith-main-2.png); - background-position: -116px -1289px; - width: 60px; - height: 60px; -} -.hair_base_5_pblue { - background-image: url(spritesmith-main-2.png); - background-position: -182px -1274px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_5_pblue { - background-image: url(spritesmith-main-2.png); - background-position: -207px -1289px; - width: 60px; - height: 60px; -} -.hair_base_5_pblue2 { - background-image: url(spritesmith-main-2.png); - background-position: -273px -1274px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_5_pblue2 { - background-image: url(spritesmith-main-2.png); - background-position: -298px -1289px; - width: 60px; - height: 60px; -} -.hair_base_5_peppermint { - background-image: url(spritesmith-main-2.png); - background-position: -364px -1274px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_5_peppermint { - background-image: url(spritesmith-main-2.png); - background-position: -389px -1289px; - width: 60px; - height: 60px; -} -.hair_base_5_pgreen { - background-image: url(spritesmith-main-2.png); - background-position: -455px -1274px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_5_pgreen { - background-image: url(spritesmith-main-2.png); - background-position: -480px -1289px; - width: 60px; - height: 60px; -} -.hair_base_5_pgreen2 { - background-image: url(spritesmith-main-2.png); - background-position: -546px -1274px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_5_pgreen2 { - background-image: url(spritesmith-main-2.png); - background-position: -571px -1289px; - width: 60px; - height: 60px; -} -.hair_base_5_porange { - background-image: url(spritesmith-main-2.png); - background-position: -637px -1274px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_5_porange { - background-image: url(spritesmith-main-2.png); - background-position: -662px -1289px; - width: 60px; - height: 60px; -} -.hair_base_5_porange2 { - background-image: url(spritesmith-main-2.png); - background-position: -728px -1274px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_5_porange2 { - background-image: url(spritesmith-main-2.png); - background-position: -753px -1289px; - width: 60px; - height: 60px; -} -.hair_base_5_ppink { - background-image: url(spritesmith-main-2.png); - background-position: -819px -1274px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_5_ppink { - background-image: url(spritesmith-main-2.png); - background-position: -844px -1289px; - width: 60px; - height: 60px; -} -.hair_base_5_ppink2 { - background-image: url(spritesmith-main-2.png); - background-position: -910px -1274px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_5_ppink2 { - background-image: url(spritesmith-main-2.png); - background-position: -935px -1289px; - width: 60px; - height: 60px; -} -.hair_base_5_ppurple { - background-image: url(spritesmith-main-2.png); - background-position: -1001px -1274px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_5_ppurple { - background-image: url(spritesmith-main-2.png); - background-position: -1026px -1289px; - width: 60px; - height: 60px; -} -.hair_base_5_ppurple2 { - background-image: url(spritesmith-main-2.png); - background-position: -1092px -1274px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_5_ppurple2 { - background-image: url(spritesmith-main-2.png); - background-position: -1117px -1289px; - width: 60px; - height: 60px; -} -.hair_base_5_pumpkin { - background-image: url(spritesmith-main-2.png); - background-position: -1183px -1274px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_5_pumpkin { - background-image: url(spritesmith-main-2.png); - background-position: -1208px -1289px; - width: 60px; - height: 60px; -} -.hair_base_5_purple { - background-image: url(spritesmith-main-2.png); - background-position: -1274px -1274px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_5_purple { - background-image: url(spritesmith-main-2.png); - background-position: -1299px -1289px; - width: 60px; - height: 60px; -} -.hair_base_5_pyellow { - background-image: url(spritesmith-main-2.png); - background-position: -1365px 0px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_5_pyellow { - background-image: url(spritesmith-main-2.png); - background-position: -1390px -15px; - width: 60px; - height: 60px; -} -.hair_base_5_pyellow2 { - background-image: url(spritesmith-main-2.png); - background-position: -1365px -91px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_5_pyellow2 { - background-image: url(spritesmith-main-2.png); - background-position: -1390px -106px; - width: 60px; - height: 60px; -} -.hair_base_5_rainbow { - background-image: url(spritesmith-main-2.png); - background-position: -1365px -182px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_5_rainbow { - background-image: url(spritesmith-main-2.png); - background-position: -1390px -197px; - width: 60px; - height: 60px; -} -.hair_base_5_red { - background-image: url(spritesmith-main-2.png); - background-position: -1365px -273px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_5_red { - background-image: url(spritesmith-main-2.png); - background-position: -1390px -288px; - width: 60px; - height: 60px; -} -.hair_base_5_snowy { - background-image: url(spritesmith-main-2.png); - background-position: -1365px -364px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_5_snowy { - background-image: url(spritesmith-main-2.png); - background-position: -1390px -379px; - width: 60px; - height: 60px; -} -.hair_base_5_white { - background-image: url(spritesmith-main-2.png); - background-position: -1365px -546px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_5_white { - background-image: url(spritesmith-main-2.png); - background-position: -1390px -561px; - width: 60px; - height: 60px; -} -.hair_base_5_winternight { - background-image: url(spritesmith-main-2.png); - background-position: -1365px -637px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_5_winternight { - background-image: url(spritesmith-main-2.png); - background-position: -1390px -652px; - width: 60px; - height: 60px; -} -.hair_base_5_winterstar { - background-image: url(spritesmith-main-2.png); - background-position: -1365px -728px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_5_winterstar { - background-image: url(spritesmith-main-2.png); - background-position: -1390px -743px; - width: 60px; - height: 60px; -} -.hair_base_5_yellow { - background-image: url(spritesmith-main-2.png); - background-position: -1365px -819px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_5_yellow { - background-image: url(spritesmith-main-2.png); - background-position: -1390px -834px; - width: 60px; - height: 60px; -} -.hair_base_5_zombie { - background-image: url(spritesmith-main-2.png); - background-position: -1365px -910px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_5_zombie { - background-image: url(spritesmith-main-2.png); - background-position: -1390px -925px; - width: 60px; - height: 60px; -} -.hair_base_6_TRUred { - background-image: url(spritesmith-main-2.png); - background-position: -1456px -1183px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_6_TRUred { - background-image: url(spritesmith-main-2.png); - background-position: -1481px -1198px; - width: 60px; - height: 60px; -} -.hair_base_6_aurora { - background-image: url(spritesmith-main-2.png); - background-position: -1365px -1001px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_6_aurora { - background-image: url(spritesmith-main-2.png); - background-position: -1390px -1016px; - width: 60px; - height: 60px; -} -.hair_base_6_black { +.hair_base_5_TRUred { background-image: url(spritesmith-main-2.png); background-position: -1365px -1092px; width: 90px; height: 90px; } -.customize-option.hair_base_6_black { +.customize-option.hair_base_5_TRUred { background-image: url(spritesmith-main-2.png); background-position: -1390px -1107px; width: 60px; height: 60px; } -.hair_base_6_blond { +.hair_base_5_aurora { + background-image: url(spritesmith-main-2.png); + background-position: -1274px -728px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_5_aurora { + background-image: url(spritesmith-main-2.png); + background-position: -1299px -743px; + width: 60px; + height: 60px; +} +.hair_base_5_black { + background-image: url(spritesmith-main-2.png); + background-position: -1274px -819px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_5_black { + background-image: url(spritesmith-main-2.png); + background-position: -1299px -834px; + width: 60px; + height: 60px; +} +.hair_base_5_blond { + background-image: url(spritesmith-main-2.png); + background-position: -1274px -910px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_5_blond { + background-image: url(spritesmith-main-2.png); + background-position: -1299px -925px; + width: 60px; + height: 60px; +} +.hair_base_5_blue { + background-image: url(spritesmith-main-2.png); + background-position: -1274px -1001px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_5_blue { + background-image: url(spritesmith-main-2.png); + background-position: -1299px -1016px; + width: 60px; + height: 60px; +} +.hair_base_5_brown { + background-image: url(spritesmith-main-2.png); + background-position: -1274px -1092px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_5_brown { + background-image: url(spritesmith-main-2.png); + background-position: -1299px -1107px; + width: 60px; + height: 60px; +} +.hair_base_5_candycane { + background-image: url(spritesmith-main-2.png); + background-position: -1274px -1183px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_5_candycane { + background-image: url(spritesmith-main-2.png); + background-position: -1299px -1198px; + width: 60px; + height: 60px; +} +.hair_base_5_candycorn { + background-image: url(spritesmith-main-2.png); + background-position: 0px -1274px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_5_candycorn { + background-image: url(spritesmith-main-2.png); + background-position: -25px -1289px; + width: 60px; + height: 60px; +} +.hair_base_5_festive { + background-image: url(spritesmith-main-2.png); + background-position: -91px -1274px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_5_festive { + background-image: url(spritesmith-main-2.png); + background-position: -116px -1289px; + width: 60px; + height: 60px; +} +.hair_base_5_frost { + background-image: url(spritesmith-main-2.png); + background-position: -182px -1274px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_5_frost { + background-image: url(spritesmith-main-2.png); + background-position: -207px -1289px; + width: 60px; + height: 60px; +} +.hair_base_5_ghostwhite { + background-image: url(spritesmith-main-2.png); + background-position: -273px -1274px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_5_ghostwhite { + background-image: url(spritesmith-main-2.png); + background-position: -298px -1289px; + width: 60px; + height: 60px; +} +.hair_base_5_green { + background-image: url(spritesmith-main-2.png); + background-position: -364px -1274px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_5_green { + background-image: url(spritesmith-main-2.png); + background-position: -389px -1289px; + width: 60px; + height: 60px; +} +.hair_base_5_halloween { + background-image: url(spritesmith-main-2.png); + background-position: -455px -1274px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_5_halloween { + background-image: url(spritesmith-main-2.png); + background-position: -480px -1289px; + width: 60px; + height: 60px; +} +.hair_base_5_holly { + background-image: url(spritesmith-main-2.png); + background-position: -546px -1274px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_5_holly { + background-image: url(spritesmith-main-2.png); + background-position: -571px -1289px; + width: 60px; + height: 60px; +} +.hair_base_5_hollygreen { + background-image: url(spritesmith-main-2.png); + background-position: -637px -1274px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_5_hollygreen { + background-image: url(spritesmith-main-2.png); + background-position: -662px -1289px; + width: 60px; + height: 60px; +} +.hair_base_5_midnight { + background-image: url(spritesmith-main-2.png); + background-position: -728px -1274px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_5_midnight { + background-image: url(spritesmith-main-2.png); + background-position: -753px -1289px; + width: 60px; + height: 60px; +} +.hair_base_5_pblue { + background-image: url(spritesmith-main-2.png); + background-position: -819px -1274px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_5_pblue { + background-image: url(spritesmith-main-2.png); + background-position: -844px -1289px; + width: 60px; + height: 60px; +} +.hair_base_5_pblue2 { + background-image: url(spritesmith-main-2.png); + background-position: -910px -1274px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_5_pblue2 { + background-image: url(spritesmith-main-2.png); + background-position: -935px -1289px; + width: 60px; + height: 60px; +} +.hair_base_5_peppermint { + background-image: url(spritesmith-main-2.png); + background-position: -1001px -1274px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_5_peppermint { + background-image: url(spritesmith-main-2.png); + background-position: -1026px -1289px; + width: 60px; + height: 60px; +} +.hair_base_5_pgreen { + background-image: url(spritesmith-main-2.png); + background-position: -1092px -1274px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_5_pgreen { + background-image: url(spritesmith-main-2.png); + background-position: -1117px -1289px; + width: 60px; + height: 60px; +} +.hair_base_5_pgreen2 { + background-image: url(spritesmith-main-2.png); + background-position: -1183px -1274px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_5_pgreen2 { + background-image: url(spritesmith-main-2.png); + background-position: -1208px -1289px; + width: 60px; + height: 60px; +} +.hair_base_5_porange { + background-image: url(spritesmith-main-2.png); + background-position: -1274px -1274px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_5_porange { + background-image: url(spritesmith-main-2.png); + background-position: -1299px -1289px; + width: 60px; + height: 60px; +} +.hair_base_5_porange2 { + background-image: url(spritesmith-main-2.png); + background-position: -1365px 0px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_5_porange2 { + background-image: url(spritesmith-main-2.png); + background-position: -1390px -15px; + width: 60px; + height: 60px; +} +.hair_base_5_ppink { + background-image: url(spritesmith-main-2.png); + background-position: -1365px -91px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_5_ppink { + background-image: url(spritesmith-main-2.png); + background-position: -1390px -106px; + width: 60px; + height: 60px; +} +.hair_base_5_ppink2 { + background-image: url(spritesmith-main-2.png); + background-position: -1365px -182px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_5_ppink2 { + background-image: url(spritesmith-main-2.png); + background-position: -1390px -197px; + width: 60px; + height: 60px; +} +.hair_base_5_ppurple { + background-image: url(spritesmith-main-2.png); + background-position: -1365px -273px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_5_ppurple { + background-image: url(spritesmith-main-2.png); + background-position: -1390px -288px; + width: 60px; + height: 60px; +} +.hair_base_5_ppurple2 { + background-image: url(spritesmith-main-2.png); + background-position: -1365px -364px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_5_ppurple2 { + background-image: url(spritesmith-main-2.png); + background-position: -1390px -379px; + width: 60px; + height: 60px; +} +.hair_base_5_pumpkin { + background-image: url(spritesmith-main-2.png); + background-position: -1365px -455px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_5_pumpkin { + background-image: url(spritesmith-main-2.png); + background-position: -1390px -470px; + width: 60px; + height: 60px; +} +.hair_base_5_purple { + background-image: url(spritesmith-main-2.png); + background-position: -1365px -546px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_5_purple { + background-image: url(spritesmith-main-2.png); + background-position: -1390px -561px; + width: 60px; + height: 60px; +} +.hair_base_5_pyellow { + background-image: url(spritesmith-main-2.png); + background-position: -1365px -637px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_5_pyellow { + background-image: url(spritesmith-main-2.png); + background-position: -1390px -652px; + width: 60px; + height: 60px; +} +.hair_base_5_pyellow2 { + background-image: url(spritesmith-main-2.png); + background-position: -1365px -728px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_5_pyellow2 { + background-image: url(spritesmith-main-2.png); + background-position: -1390px -743px; + width: 60px; + height: 60px; +} +.hair_base_5_rainbow { + background-image: url(spritesmith-main-2.png); + background-position: -1365px -819px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_5_rainbow { + background-image: url(spritesmith-main-2.png); + background-position: -1390px -834px; + width: 60px; + height: 60px; +} +.hair_base_5_red { + background-image: url(spritesmith-main-2.png); + background-position: -1365px -910px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_5_red { + background-image: url(spritesmith-main-2.png); + background-position: -1390px -925px; + width: 60px; + height: 60px; +} +.hair_base_5_snowy { + background-image: url(spritesmith-main-2.png); + background-position: -1365px -1001px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_5_snowy { + background-image: url(spritesmith-main-2.png); + background-position: -1390px -1016px; + width: 60px; + height: 60px; +} +.hair_base_5_white { background-image: url(spritesmith-main-2.png); background-position: -1365px -1183px; width: 90px; height: 90px; } -.customize-option.hair_base_6_blond { +.customize-option.hair_base_5_white { background-image: url(spritesmith-main-2.png); background-position: -1390px -1198px; width: 60px; height: 60px; } -.hair_base_6_blue { +.hair_base_5_winternight { background-image: url(spritesmith-main-2.png); background-position: -1365px -1274px; width: 90px; height: 90px; } -.customize-option.hair_base_6_blue { +.customize-option.hair_base_5_winternight { background-image: url(spritesmith-main-2.png); background-position: -1390px -1289px; width: 60px; height: 60px; } -.hair_base_6_brown { +.hair_base_5_winterstar { background-image: url(spritesmith-main-2.png); background-position: 0px -1365px; width: 90px; height: 90px; } -.customize-option.hair_base_6_brown { +.customize-option.hair_base_5_winterstar { background-image: url(spritesmith-main-2.png); background-position: -25px -1380px; width: 60px; height: 60px; } -.hair_base_6_candycane { +.hair_base_5_yellow { background-image: url(spritesmith-main-2.png); background-position: -91px -1365px; width: 90px; height: 90px; } -.customize-option.hair_base_6_candycane { +.customize-option.hair_base_5_yellow { background-image: url(spritesmith-main-2.png); background-position: -116px -1380px; width: 60px; height: 60px; } -.hair_base_6_candycorn { +.hair_base_5_zombie { background-image: url(spritesmith-main-2.png); background-position: -182px -1365px; width: 90px; height: 90px; } -.customize-option.hair_base_6_candycorn { +.customize-option.hair_base_5_zombie { background-image: url(spritesmith-main-2.png); background-position: -207px -1380px; width: 60px; height: 60px; } -.hair_base_6_festive { - background-image: url(spritesmith-main-2.png); - background-position: -273px -1365px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_6_festive { - background-image: url(spritesmith-main-2.png); - background-position: -298px -1380px; - width: 60px; - height: 60px; -} -.hair_base_6_frost { - background-image: url(spritesmith-main-2.png); - background-position: -364px -1365px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_6_frost { - background-image: url(spritesmith-main-2.png); - background-position: -389px -1380px; - width: 60px; - height: 60px; -} -.hair_base_6_ghostwhite { - background-image: url(spritesmith-main-2.png); - background-position: -455px -1365px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_6_ghostwhite { - background-image: url(spritesmith-main-2.png); - background-position: -480px -1380px; - width: 60px; - height: 60px; -} -.hair_base_6_green { - background-image: url(spritesmith-main-2.png); - background-position: -546px -1365px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_6_green { - background-image: url(spritesmith-main-2.png); - background-position: -571px -1380px; - width: 60px; - height: 60px; -} -.hair_base_6_halloween { - background-image: url(spritesmith-main-2.png); - background-position: -637px -1365px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_6_halloween { - background-image: url(spritesmith-main-2.png); - background-position: -662px -1380px; - width: 60px; - height: 60px; -} -.hair_base_6_holly { - background-image: url(spritesmith-main-2.png); - background-position: -728px -1365px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_6_holly { - background-image: url(spritesmith-main-2.png); - background-position: -753px -1380px; - width: 60px; - height: 60px; -} -.hair_base_6_hollygreen { - background-image: url(spritesmith-main-2.png); - background-position: -819px -1365px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_6_hollygreen { - background-image: url(spritesmith-main-2.png); - background-position: -844px -1380px; - width: 60px; - height: 60px; -} -.hair_base_6_midnight { - background-image: url(spritesmith-main-2.png); - background-position: -910px -1365px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_6_midnight { - background-image: url(spritesmith-main-2.png); - background-position: -935px -1380px; - width: 60px; - height: 60px; -} -.hair_base_6_pblue { - background-image: url(spritesmith-main-2.png); - background-position: -1001px -1365px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_6_pblue { - background-image: url(spritesmith-main-2.png); - background-position: -1026px -1380px; - width: 60px; - height: 60px; -} -.hair_base_6_pblue2 { - background-image: url(spritesmith-main-2.png); - background-position: -1092px -1365px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_6_pblue2 { - background-image: url(spritesmith-main-2.png); - background-position: -1117px -1380px; - width: 60px; - height: 60px; -} -.hair_base_6_peppermint { - background-image: url(spritesmith-main-2.png); - background-position: -1183px -1365px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_6_peppermint { - background-image: url(spritesmith-main-2.png); - background-position: -1208px -1380px; - width: 60px; - height: 60px; -} -.hair_base_6_pgreen { - background-image: url(spritesmith-main-2.png); - background-position: -1274px -1365px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_6_pgreen { - background-image: url(spritesmith-main-2.png); - background-position: -1299px -1380px; - width: 60px; - height: 60px; -} -.hair_base_6_pgreen2 { - background-image: url(spritesmith-main-2.png); - background-position: -1365px -1365px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_6_pgreen2 { - background-image: url(spritesmith-main-2.png); - background-position: -1390px -1380px; - width: 60px; - height: 60px; -} -.hair_base_6_porange { - background-image: url(spritesmith-main-2.png); - background-position: -1456px 0px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_6_porange { - background-image: url(spritesmith-main-2.png); - background-position: -1481px -15px; - width: 60px; - height: 60px; -} -.hair_base_6_porange2 { - background-image: url(spritesmith-main-2.png); - background-position: -1456px -91px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_6_porange2 { - background-image: url(spritesmith-main-2.png); - background-position: -1481px -106px; - width: 60px; - height: 60px; -} -.hair_base_6_ppink { - background-image: url(spritesmith-main-2.png); - background-position: -1456px -182px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_6_ppink { - background-image: url(spritesmith-main-2.png); - background-position: -1481px -197px; - width: 60px; - height: 60px; -} -.hair_base_6_ppink2 { - background-image: url(spritesmith-main-2.png); - background-position: -1456px -273px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_6_ppink2 { - background-image: url(spritesmith-main-2.png); - background-position: -1481px -288px; - width: 60px; - height: 60px; -} -.hair_base_6_ppurple { - background-image: url(spritesmith-main-2.png); - background-position: -1456px -364px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_6_ppurple { - background-image: url(spritesmith-main-2.png); - background-position: -1481px -379px; - width: 60px; - height: 60px; -} -.hair_base_6_ppurple2 { - background-image: url(spritesmith-main-2.png); - background-position: -1456px -455px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_6_ppurple2 { - background-image: url(spritesmith-main-2.png); - background-position: -1481px -470px; - width: 60px; - height: 60px; -} -.hair_base_6_pumpkin { - background-image: url(spritesmith-main-2.png); - background-position: -1456px -546px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_6_pumpkin { - background-image: url(spritesmith-main-2.png); - background-position: -1481px -561px; - width: 60px; - height: 60px; -} -.hair_base_6_purple { - background-image: url(spritesmith-main-2.png); - background-position: -1456px -637px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_6_purple { - background-image: url(spritesmith-main-2.png); - background-position: -1481px -652px; - width: 60px; - height: 60px; -} -.hair_base_6_pyellow { - background-image: url(spritesmith-main-2.png); - background-position: -1456px -728px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_6_pyellow { - background-image: url(spritesmith-main-2.png); - background-position: -1481px -743px; - width: 60px; - height: 60px; -} -.hair_base_6_pyellow2 { - background-image: url(spritesmith-main-2.png); - background-position: -1456px -819px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_6_pyellow2 { - background-image: url(spritesmith-main-2.png); - background-position: -1481px -834px; - width: 60px; - height: 60px; -} -.hair_base_6_rainbow { - background-image: url(spritesmith-main-2.png); - background-position: -1456px -910px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_6_rainbow { - background-image: url(spritesmith-main-2.png); - background-position: -1481px -925px; - width: 60px; - height: 60px; -} -.hair_base_6_red { - background-image: url(spritesmith-main-2.png); - background-position: -1456px -1001px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_6_red { - background-image: url(spritesmith-main-2.png); - background-position: -1481px -1016px; - width: 60px; - height: 60px; -} -.hair_base_6_snowy { - background-image: url(spritesmith-main-2.png); - background-position: -1456px -1092px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_6_snowy { - background-image: url(spritesmith-main-2.png); - background-position: -1481px -1107px; - width: 60px; - height: 60px; -} -.hair_base_6_white { - background-image: url(spritesmith-main-2.png); - background-position: -1456px -1274px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_6_white { - background-image: url(spritesmith-main-2.png); - background-position: -1481px -1289px; - width: 60px; - height: 60px; -} -.hair_base_6_winternight { - background-image: url(spritesmith-main-2.png); - background-position: -1456px -1365px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_6_winternight { - background-image: url(spritesmith-main-2.png); - background-position: -1481px -1380px; - width: 60px; - height: 60px; -} -.hair_base_6_winterstar { - background-image: url(spritesmith-main-2.png); - background-position: 0px -1456px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_6_winterstar { - background-image: url(spritesmith-main-2.png); - background-position: -25px -1471px; - width: 60px; - height: 60px; -} -.hair_base_6_yellow { - background-image: url(spritesmith-main-2.png); - background-position: -91px -1456px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_6_yellow { - background-image: url(spritesmith-main-2.png); - background-position: -116px -1471px; - width: 60px; - height: 60px; -} -.hair_base_6_zombie { - background-image: url(spritesmith-main-2.png); - background-position: -182px -1456px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_6_zombie { - background-image: url(spritesmith-main-2.png); - background-position: -207px -1471px; - width: 60px; - height: 60px; -} -.hair_base_7_TRUred { - background-image: url(spritesmith-main-2.png); - background-position: -182px -1547px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_7_TRUred { - background-image: url(spritesmith-main-2.png); - background-position: -207px -1562px; - width: 60px; - height: 60px; -} -.hair_base_7_aurora { - background-image: url(spritesmith-main-2.png); - background-position: -273px -1456px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_7_aurora { - background-image: url(spritesmith-main-2.png); - background-position: -298px -1471px; - width: 60px; - height: 60px; -} -.hair_base_7_black { +.hair_base_6_TRUred { background-image: url(spritesmith-main-2.png); background-position: -364px -1456px; width: 90px; height: 90px; } -.customize-option.hair_base_7_black { +.customize-option.hair_base_6_TRUred { background-image: url(spritesmith-main-2.png); background-position: -389px -1471px; width: 60px; height: 60px; } -.hair_base_7_blond { +.hair_base_6_aurora { + background-image: url(spritesmith-main-2.png); + background-position: -273px -1365px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_6_aurora { + background-image: url(spritesmith-main-2.png); + background-position: -298px -1380px; + width: 60px; + height: 60px; +} +.hair_base_6_black { + background-image: url(spritesmith-main-2.png); + background-position: -364px -1365px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_6_black { + background-image: url(spritesmith-main-2.png); + background-position: -389px -1380px; + width: 60px; + height: 60px; +} +.hair_base_6_blond { + background-image: url(spritesmith-main-2.png); + background-position: -455px -1365px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_6_blond { + background-image: url(spritesmith-main-2.png); + background-position: -480px -1380px; + width: 60px; + height: 60px; +} +.hair_base_6_blue { + background-image: url(spritesmith-main-2.png); + background-position: -546px -1365px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_6_blue { + background-image: url(spritesmith-main-2.png); + background-position: -571px -1380px; + width: 60px; + height: 60px; +} +.hair_base_6_brown { + background-image: url(spritesmith-main-2.png); + background-position: -637px -1365px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_6_brown { + background-image: url(spritesmith-main-2.png); + background-position: -662px -1380px; + width: 60px; + height: 60px; +} +.hair_base_6_candycane { + background-image: url(spritesmith-main-2.png); + background-position: -728px -1365px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_6_candycane { + background-image: url(spritesmith-main-2.png); + background-position: -753px -1380px; + width: 60px; + height: 60px; +} +.hair_base_6_candycorn { + background-image: url(spritesmith-main-2.png); + background-position: -819px -1365px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_6_candycorn { + background-image: url(spritesmith-main-2.png); + background-position: -844px -1380px; + width: 60px; + height: 60px; +} +.hair_base_6_festive { + background-image: url(spritesmith-main-2.png); + background-position: -910px -1365px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_6_festive { + background-image: url(spritesmith-main-2.png); + background-position: -935px -1380px; + width: 60px; + height: 60px; +} +.hair_base_6_frost { + background-image: url(spritesmith-main-2.png); + background-position: -1001px -1365px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_6_frost { + background-image: url(spritesmith-main-2.png); + background-position: -1026px -1380px; + width: 60px; + height: 60px; +} +.hair_base_6_ghostwhite { + background-image: url(spritesmith-main-2.png); + background-position: -1092px -1365px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_6_ghostwhite { + background-image: url(spritesmith-main-2.png); + background-position: -1117px -1380px; + width: 60px; + height: 60px; +} +.hair_base_6_green { + background-image: url(spritesmith-main-2.png); + background-position: -1183px -1365px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_6_green { + background-image: url(spritesmith-main-2.png); + background-position: -1208px -1380px; + width: 60px; + height: 60px; +} +.hair_base_6_halloween { + background-image: url(spritesmith-main-2.png); + background-position: -1274px -1365px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_6_halloween { + background-image: url(spritesmith-main-2.png); + background-position: -1299px -1380px; + width: 60px; + height: 60px; +} +.hair_base_6_holly { + background-image: url(spritesmith-main-2.png); + background-position: -1365px -1365px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_6_holly { + background-image: url(spritesmith-main-2.png); + background-position: -1390px -1380px; + width: 60px; + height: 60px; +} +.hair_base_6_hollygreen { + background-image: url(spritesmith-main-2.png); + background-position: -1456px 0px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_6_hollygreen { + background-image: url(spritesmith-main-2.png); + background-position: -1481px -15px; + width: 60px; + height: 60px; +} +.hair_base_6_midnight { + background-image: url(spritesmith-main-2.png); + background-position: -1456px -91px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_6_midnight { + background-image: url(spritesmith-main-2.png); + background-position: -1481px -106px; + width: 60px; + height: 60px; +} +.hair_base_6_pblue { + background-image: url(spritesmith-main-2.png); + background-position: -1456px -182px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_6_pblue { + background-image: url(spritesmith-main-2.png); + background-position: -1481px -197px; + width: 60px; + height: 60px; +} +.hair_base_6_pblue2 { + background-image: url(spritesmith-main-2.png); + background-position: -1456px -273px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_6_pblue2 { + background-image: url(spritesmith-main-2.png); + background-position: -1481px -288px; + width: 60px; + height: 60px; +} +.hair_base_6_peppermint { + background-image: url(spritesmith-main-2.png); + background-position: -1456px -364px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_6_peppermint { + background-image: url(spritesmith-main-2.png); + background-position: -1481px -379px; + width: 60px; + height: 60px; +} +.hair_base_6_pgreen { + background-image: url(spritesmith-main-2.png); + background-position: -1456px -455px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_6_pgreen { + background-image: url(spritesmith-main-2.png); + background-position: -1481px -470px; + width: 60px; + height: 60px; +} +.hair_base_6_pgreen2 { + background-image: url(spritesmith-main-2.png); + background-position: -1456px -546px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_6_pgreen2 { + background-image: url(spritesmith-main-2.png); + background-position: -1481px -561px; + width: 60px; + height: 60px; +} +.hair_base_6_porange { + background-image: url(spritesmith-main-2.png); + background-position: -1456px -637px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_6_porange { + background-image: url(spritesmith-main-2.png); + background-position: -1481px -652px; + width: 60px; + height: 60px; +} +.hair_base_6_porange2 { + background-image: url(spritesmith-main-2.png); + background-position: -1456px -728px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_6_porange2 { + background-image: url(spritesmith-main-2.png); + background-position: -1481px -743px; + width: 60px; + height: 60px; +} +.hair_base_6_ppink { + background-image: url(spritesmith-main-2.png); + background-position: -1456px -819px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_6_ppink { + background-image: url(spritesmith-main-2.png); + background-position: -1481px -834px; + width: 60px; + height: 60px; +} +.hair_base_6_ppink2 { + background-image: url(spritesmith-main-2.png); + background-position: -1456px -910px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_6_ppink2 { + background-image: url(spritesmith-main-2.png); + background-position: -1481px -925px; + width: 60px; + height: 60px; +} +.hair_base_6_ppurple { + background-image: url(spritesmith-main-2.png); + background-position: -1456px -1001px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_6_ppurple { + background-image: url(spritesmith-main-2.png); + background-position: -1481px -1016px; + width: 60px; + height: 60px; +} +.hair_base_6_ppurple2 { + background-image: url(spritesmith-main-2.png); + background-position: -1456px -1092px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_6_ppurple2 { + background-image: url(spritesmith-main-2.png); + background-position: -1481px -1107px; + width: 60px; + height: 60px; +} +.hair_base_6_pumpkin { + background-image: url(spritesmith-main-2.png); + background-position: -1456px -1183px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_6_pumpkin { + background-image: url(spritesmith-main-2.png); + background-position: -1481px -1198px; + width: 60px; + height: 60px; +} +.hair_base_6_purple { + background-image: url(spritesmith-main-2.png); + background-position: -1456px -1274px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_6_purple { + background-image: url(spritesmith-main-2.png); + background-position: -1481px -1289px; + width: 60px; + height: 60px; +} +.hair_base_6_pyellow { + background-image: url(spritesmith-main-2.png); + background-position: -1456px -1365px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_6_pyellow { + background-image: url(spritesmith-main-2.png); + background-position: -1481px -1380px; + width: 60px; + height: 60px; +} +.hair_base_6_pyellow2 { + background-image: url(spritesmith-main-2.png); + background-position: 0px -1456px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_6_pyellow2 { + background-image: url(spritesmith-main-2.png); + background-position: -25px -1471px; + width: 60px; + height: 60px; +} +.hair_base_6_rainbow { + background-image: url(spritesmith-main-2.png); + background-position: -91px -1456px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_6_rainbow { + background-image: url(spritesmith-main-2.png); + background-position: -116px -1471px; + width: 60px; + height: 60px; +} +.hair_base_6_red { + background-image: url(spritesmith-main-2.png); + background-position: -182px -1456px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_6_red { + background-image: url(spritesmith-main-2.png); + background-position: -207px -1471px; + width: 60px; + height: 60px; +} +.hair_base_6_snowy { + background-image: url(spritesmith-main-2.png); + background-position: -273px -1456px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_6_snowy { + background-image: url(spritesmith-main-2.png); + background-position: -298px -1471px; + width: 60px; + height: 60px; +} +.hair_base_6_white { background-image: url(spritesmith-main-2.png); background-position: -455px -1456px; width: 90px; height: 90px; } -.customize-option.hair_base_7_blond { +.customize-option.hair_base_6_white { background-image: url(spritesmith-main-2.png); background-position: -480px -1471px; width: 60px; height: 60px; } -.hair_base_7_blue { +.hair_base_6_winternight { background-image: url(spritesmith-main-2.png); background-position: -546px -1456px; width: 90px; height: 90px; } -.customize-option.hair_base_7_blue { +.customize-option.hair_base_6_winternight { background-image: url(spritesmith-main-2.png); background-position: -571px -1471px; width: 60px; height: 60px; } -.hair_base_7_brown { +.hair_base_6_winterstar { background-image: url(spritesmith-main-2.png); background-position: -637px -1456px; width: 90px; height: 90px; } -.customize-option.hair_base_7_brown { +.customize-option.hair_base_6_winterstar { background-image: url(spritesmith-main-2.png); background-position: -662px -1471px; width: 60px; height: 60px; } -.hair_base_7_candycane { +.hair_base_6_yellow { background-image: url(spritesmith-main-2.png); background-position: -728px -1456px; width: 90px; height: 90px; } -.customize-option.hair_base_7_candycane { +.customize-option.hair_base_6_yellow { background-image: url(spritesmith-main-2.png); background-position: -753px -1471px; width: 60px; height: 60px; } -.hair_base_7_candycorn { +.hair_base_6_zombie { background-image: url(spritesmith-main-2.png); background-position: -819px -1456px; width: 90px; height: 90px; } -.customize-option.hair_base_7_candycorn { +.customize-option.hair_base_6_zombie { background-image: url(spritesmith-main-2.png); background-position: -844px -1471px; width: 60px; height: 60px; } -.hair_base_7_festive { - background-image: url(spritesmith-main-2.png); - background-position: -910px -1456px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_7_festive { - background-image: url(spritesmith-main-2.png); - background-position: -935px -1471px; - width: 60px; - height: 60px; -} -.hair_base_7_frost { - background-image: url(spritesmith-main-2.png); - background-position: -1001px -1456px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_7_frost { - background-image: url(spritesmith-main-2.png); - background-position: -1026px -1471px; - width: 60px; - height: 60px; -} -.hair_base_7_ghostwhite { - background-image: url(spritesmith-main-2.png); - background-position: -1092px -1456px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_7_ghostwhite { - background-image: url(spritesmith-main-2.png); - background-position: -1117px -1471px; - width: 60px; - height: 60px; -} -.hair_base_7_green { - background-image: url(spritesmith-main-2.png); - background-position: -1183px -1456px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_7_green { - background-image: url(spritesmith-main-2.png); - background-position: -1208px -1471px; - width: 60px; - height: 60px; -} -.hair_base_7_halloween { - background-image: url(spritesmith-main-2.png); - background-position: -1274px -1456px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_7_halloween { - background-image: url(spritesmith-main-2.png); - background-position: -1299px -1471px; - width: 60px; - height: 60px; -} -.hair_base_7_holly { - background-image: url(spritesmith-main-2.png); - background-position: -1365px -1456px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_7_holly { - background-image: url(spritesmith-main-2.png); - background-position: -1390px -1471px; - width: 60px; - height: 60px; -} -.hair_base_7_hollygreen { - background-image: url(spritesmith-main-2.png); - background-position: -1456px -1456px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_7_hollygreen { - background-image: url(spritesmith-main-2.png); - background-position: -1481px -1471px; - width: 60px; - height: 60px; -} -.hair_base_7_midnight { - background-image: url(spritesmith-main-2.png); - background-position: -1547px 0px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_7_midnight { - background-image: url(spritesmith-main-2.png); - background-position: -1572px -15px; - width: 60px; - height: 60px; -} -.hair_base_7_pblue { - background-image: url(spritesmith-main-2.png); - background-position: -1547px -91px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_7_pblue { - background-image: url(spritesmith-main-2.png); - background-position: -1572px -106px; - width: 60px; - height: 60px; -} -.hair_base_7_pblue2 { - background-image: url(spritesmith-main-2.png); - background-position: -1547px -182px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_7_pblue2 { - background-image: url(spritesmith-main-2.png); - background-position: -1572px -197px; - width: 60px; - height: 60px; -} -.hair_base_7_peppermint { - background-image: url(spritesmith-main-2.png); - background-position: -1547px -273px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_7_peppermint { - background-image: url(spritesmith-main-2.png); - background-position: -1572px -288px; - width: 60px; - height: 60px; -} -.hair_base_7_pgreen { - background-image: url(spritesmith-main-2.png); - background-position: -1547px -364px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_7_pgreen { - background-image: url(spritesmith-main-2.png); - background-position: -1572px -379px; - width: 60px; - height: 60px; -} -.hair_base_7_pgreen2 { - background-image: url(spritesmith-main-2.png); - background-position: -1547px -455px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_7_pgreen2 { - background-image: url(spritesmith-main-2.png); - background-position: -1572px -470px; - width: 60px; - height: 60px; -} -.hair_base_7_porange { - background-image: url(spritesmith-main-2.png); - background-position: -1547px -546px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_7_porange { - background-image: url(spritesmith-main-2.png); - background-position: -1572px -561px; - width: 60px; - height: 60px; -} -.hair_base_7_porange2 { - background-image: url(spritesmith-main-2.png); - background-position: -1547px -637px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_7_porange2 { - background-image: url(spritesmith-main-2.png); - background-position: -1572px -652px; - width: 60px; - height: 60px; -} -.hair_base_7_ppink { - background-image: url(spritesmith-main-2.png); - background-position: -1547px -728px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_7_ppink { - background-image: url(spritesmith-main-2.png); - background-position: -1572px -743px; - width: 60px; - height: 60px; -} -.hair_base_7_ppink2 { - background-image: url(spritesmith-main-2.png); - background-position: -1547px -819px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_7_ppink2 { - background-image: url(spritesmith-main-2.png); - background-position: -1572px -834px; - width: 60px; - height: 60px; -} -.hair_base_7_ppurple { - background-image: url(spritesmith-main-2.png); - background-position: -1547px -910px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_7_ppurple { - background-image: url(spritesmith-main-2.png); - background-position: -1572px -925px; - width: 60px; - height: 60px; -} -.hair_base_7_ppurple2 { - background-image: url(spritesmith-main-2.png); - background-position: -1547px -1001px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_7_ppurple2 { - background-image: url(spritesmith-main-2.png); - background-position: -1572px -1016px; - width: 60px; - height: 60px; -} -.hair_base_7_pumpkin { - background-image: url(spritesmith-main-2.png); - background-position: -1547px -1092px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_7_pumpkin { - background-image: url(spritesmith-main-2.png); - background-position: -1572px -1107px; - width: 60px; - height: 60px; -} -.hair_base_7_purple { - background-image: url(spritesmith-main-2.png); - background-position: -1547px -1183px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_7_purple { - background-image: url(spritesmith-main-2.png); - background-position: -1572px -1198px; - width: 60px; - height: 60px; -} -.hair_base_7_pyellow { - background-image: url(spritesmith-main-2.png); - background-position: -1547px -1274px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_7_pyellow { - background-image: url(spritesmith-main-2.png); - background-position: -1572px -1289px; - width: 60px; - height: 60px; -} -.hair_base_7_pyellow2 { - background-image: url(spritesmith-main-2.png); - background-position: -1547px -1365px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_7_pyellow2 { - background-image: url(spritesmith-main-2.png); - background-position: -1572px -1380px; - width: 60px; - height: 60px; -} -.hair_base_7_rainbow { - background-image: url(spritesmith-main-2.png); - background-position: -1547px -1456px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_7_rainbow { - background-image: url(spritesmith-main-2.png); - background-position: -1572px -1471px; - width: 60px; - height: 60px; -} -.hair_base_7_red { - background-image: url(spritesmith-main-2.png); - background-position: 0px -1547px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_7_red { - background-image: url(spritesmith-main-2.png); - background-position: -25px -1562px; - width: 60px; - height: 60px; -} -.hair_base_7_snowy { - background-image: url(spritesmith-main-2.png); - background-position: -91px -1547px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_7_snowy { - background-image: url(spritesmith-main-2.png); - background-position: -116px -1562px; - width: 60px; - height: 60px; -} -.hair_base_7_white { - background-image: url(spritesmith-main-2.png); - background-position: -273px -1547px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_7_white { - background-image: url(spritesmith-main-2.png); - background-position: -298px -1562px; - width: 60px; - height: 60px; -} -.hair_base_7_winternight { - background-image: url(spritesmith-main-2.png); - background-position: -364px -1547px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_7_winternight { - background-image: url(spritesmith-main-2.png); - background-position: -389px -1562px; - width: 60px; - height: 60px; -} -.hair_base_7_winterstar { - background-image: url(spritesmith-main-2.png); - background-position: -455px -1547px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_7_winterstar { - background-image: url(spritesmith-main-2.png); - background-position: -480px -1562px; - width: 60px; - height: 60px; -} -.hair_base_7_yellow { - background-image: url(spritesmith-main-2.png); - background-position: -546px -1547px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_7_yellow { - background-image: url(spritesmith-main-2.png); - background-position: -571px -1562px; - width: 60px; - height: 60px; -} -.hair_base_7_zombie { - background-image: url(spritesmith-main-2.png); - background-position: -637px -1547px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_7_zombie { - background-image: url(spritesmith-main-2.png); - background-position: -662px -1562px; - width: 60px; - height: 60px; -} -.hair_base_8_aurora { - background-image: url(spritesmith-main-2.png); - background-position: -728px -1547px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_8_aurora { - background-image: url(spritesmith-main-2.png); - background-position: -753px -1562px; - width: 60px; - height: 60px; -} -.hair_base_8_black { +.hair_base_7_TRUred { background-image: url(spritesmith-main-2.png); background-position: -819px -1547px; width: 90px; height: 90px; } -.customize-option.hair_base_8_black { +.customize-option.hair_base_7_TRUred { background-image: url(spritesmith-main-2.png); background-position: -844px -1562px; width: 60px; height: 60px; } -.hair_base_8_blond { +.hair_base_7_aurora { + background-image: url(spritesmith-main-2.png); + background-position: -910px -1456px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_7_aurora { + background-image: url(spritesmith-main-2.png); + background-position: -935px -1471px; + width: 60px; + height: 60px; +} +.hair_base_7_black { + background-image: url(spritesmith-main-2.png); + background-position: -1001px -1456px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_7_black { + background-image: url(spritesmith-main-2.png); + background-position: -1026px -1471px; + width: 60px; + height: 60px; +} +.hair_base_7_blond { + background-image: url(spritesmith-main-2.png); + background-position: -1092px -1456px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_7_blond { + background-image: url(spritesmith-main-2.png); + background-position: -1117px -1471px; + width: 60px; + height: 60px; +} +.hair_base_7_blue { + background-image: url(spritesmith-main-2.png); + background-position: -1183px -1456px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_7_blue { + background-image: url(spritesmith-main-2.png); + background-position: -1208px -1471px; + width: 60px; + height: 60px; +} +.hair_base_7_brown { + background-image: url(spritesmith-main-2.png); + background-position: -1274px -1456px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_7_brown { + background-image: url(spritesmith-main-2.png); + background-position: -1299px -1471px; + width: 60px; + height: 60px; +} +.hair_base_7_candycane { + background-image: url(spritesmith-main-2.png); + background-position: -1365px -1456px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_7_candycane { + background-image: url(spritesmith-main-2.png); + background-position: -1390px -1471px; + width: 60px; + height: 60px; +} +.hair_base_7_candycorn { + background-image: url(spritesmith-main-2.png); + background-position: -1456px -1456px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_7_candycorn { + background-image: url(spritesmith-main-2.png); + background-position: -1481px -1471px; + width: 60px; + height: 60px; +} +.hair_base_7_festive { + background-image: url(spritesmith-main-2.png); + background-position: -1547px 0px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_7_festive { + background-image: url(spritesmith-main-2.png); + background-position: -1572px -15px; + width: 60px; + height: 60px; +} +.hair_base_7_frost { + background-image: url(spritesmith-main-2.png); + background-position: -1547px -91px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_7_frost { + background-image: url(spritesmith-main-2.png); + background-position: -1572px -106px; + width: 60px; + height: 60px; +} +.hair_base_7_ghostwhite { + background-image: url(spritesmith-main-2.png); + background-position: -1547px -182px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_7_ghostwhite { + background-image: url(spritesmith-main-2.png); + background-position: -1572px -197px; + width: 60px; + height: 60px; +} +.hair_base_7_green { + background-image: url(spritesmith-main-2.png); + background-position: -1547px -273px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_7_green { + background-image: url(spritesmith-main-2.png); + background-position: -1572px -288px; + width: 60px; + height: 60px; +} +.hair_base_7_halloween { + background-image: url(spritesmith-main-2.png); + background-position: -1547px -364px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_7_halloween { + background-image: url(spritesmith-main-2.png); + background-position: -1572px -379px; + width: 60px; + height: 60px; +} +.hair_base_7_holly { + background-image: url(spritesmith-main-2.png); + background-position: -1547px -455px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_7_holly { + background-image: url(spritesmith-main-2.png); + background-position: -1572px -470px; + width: 60px; + height: 60px; +} +.hair_base_7_hollygreen { + background-image: url(spritesmith-main-2.png); + background-position: -1547px -546px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_7_hollygreen { + background-image: url(spritesmith-main-2.png); + background-position: -1572px -561px; + width: 60px; + height: 60px; +} +.hair_base_7_midnight { + background-image: url(spritesmith-main-2.png); + background-position: -1547px -637px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_7_midnight { + background-image: url(spritesmith-main-2.png); + background-position: -1572px -652px; + width: 60px; + height: 60px; +} +.hair_base_7_pblue { + background-image: url(spritesmith-main-2.png); + background-position: -1547px -728px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_7_pblue { + background-image: url(spritesmith-main-2.png); + background-position: -1572px -743px; + width: 60px; + height: 60px; +} +.hair_base_7_pblue2 { + background-image: url(spritesmith-main-2.png); + background-position: -1547px -819px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_7_pblue2 { + background-image: url(spritesmith-main-2.png); + background-position: -1572px -834px; + width: 60px; + height: 60px; +} +.hair_base_7_peppermint { + background-image: url(spritesmith-main-2.png); + background-position: -1547px -910px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_7_peppermint { + background-image: url(spritesmith-main-2.png); + background-position: -1572px -925px; + width: 60px; + height: 60px; +} +.hair_base_7_pgreen { + background-image: url(spritesmith-main-2.png); + background-position: -1547px -1001px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_7_pgreen { + background-image: url(spritesmith-main-2.png); + background-position: -1572px -1016px; + width: 60px; + height: 60px; +} +.hair_base_7_pgreen2 { + background-image: url(spritesmith-main-2.png); + background-position: -1547px -1092px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_7_pgreen2 { + background-image: url(spritesmith-main-2.png); + background-position: -1572px -1107px; + width: 60px; + height: 60px; +} +.hair_base_7_porange { + background-image: url(spritesmith-main-2.png); + background-position: -1547px -1183px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_7_porange { + background-image: url(spritesmith-main-2.png); + background-position: -1572px -1198px; + width: 60px; + height: 60px; +} +.hair_base_7_porange2 { + background-image: url(spritesmith-main-2.png); + background-position: -1547px -1274px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_7_porange2 { + background-image: url(spritesmith-main-2.png); + background-position: -1572px -1289px; + width: 60px; + height: 60px; +} +.hair_base_7_ppink { + background-image: url(spritesmith-main-2.png); + background-position: -1547px -1365px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_7_ppink { + background-image: url(spritesmith-main-2.png); + background-position: -1572px -1380px; + width: 60px; + height: 60px; +} +.hair_base_7_ppink2 { + background-image: url(spritesmith-main-2.png); + background-position: -1547px -1456px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_7_ppink2 { + background-image: url(spritesmith-main-2.png); + background-position: -1572px -1471px; + width: 60px; + height: 60px; +} +.hair_base_7_ppurple { + background-image: url(spritesmith-main-2.png); + background-position: 0px -1547px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_7_ppurple { + background-image: url(spritesmith-main-2.png); + background-position: -25px -1562px; + width: 60px; + height: 60px; +} +.hair_base_7_ppurple2 { + background-image: url(spritesmith-main-2.png); + background-position: -91px -1547px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_7_ppurple2 { + background-image: url(spritesmith-main-2.png); + background-position: -116px -1562px; + width: 60px; + height: 60px; +} +.hair_base_7_pumpkin { + background-image: url(spritesmith-main-2.png); + background-position: -182px -1547px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_7_pumpkin { + background-image: url(spritesmith-main-2.png); + background-position: -207px -1562px; + width: 60px; + height: 60px; +} +.hair_base_7_purple { + background-image: url(spritesmith-main-2.png); + background-position: -273px -1547px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_7_purple { + background-image: url(spritesmith-main-2.png); + background-position: -298px -1562px; + width: 60px; + height: 60px; +} +.hair_base_7_pyellow { + background-image: url(spritesmith-main-2.png); + background-position: -364px -1547px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_7_pyellow { + background-image: url(spritesmith-main-2.png); + background-position: -389px -1562px; + width: 60px; + height: 60px; +} +.hair_base_7_pyellow2 { + background-image: url(spritesmith-main-2.png); + background-position: -455px -1547px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_7_pyellow2 { + background-image: url(spritesmith-main-2.png); + background-position: -480px -1562px; + width: 60px; + height: 60px; +} +.hair_base_7_rainbow { + background-image: url(spritesmith-main-2.png); + background-position: -546px -1547px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_7_rainbow { + background-image: url(spritesmith-main-2.png); + background-position: -571px -1562px; + width: 60px; + height: 60px; +} +.hair_base_7_red { + background-image: url(spritesmith-main-2.png); + background-position: -637px -1547px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_7_red { + background-image: url(spritesmith-main-2.png); + background-position: -662px -1562px; + width: 60px; + height: 60px; +} +.hair_base_7_snowy { + background-image: url(spritesmith-main-2.png); + background-position: -728px -1547px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_7_snowy { + background-image: url(spritesmith-main-2.png); + background-position: -753px -1562px; + width: 60px; + height: 60px; +} +.hair_base_7_white { background-image: url(spritesmith-main-2.png); background-position: -910px -1547px; width: 90px; height: 90px; } -.customize-option.hair_base_8_blond { +.customize-option.hair_base_7_white { background-image: url(spritesmith-main-2.png); background-position: -935px -1562px; width: 60px; height: 60px; } -.hair_base_8_blue { +.hair_base_7_winternight { background-image: url(spritesmith-main-2.png); background-position: -1001px -1547px; width: 90px; height: 90px; } -.customize-option.hair_base_8_blue { +.customize-option.hair_base_7_winternight { background-image: url(spritesmith-main-2.png); background-position: -1026px -1562px; width: 60px; height: 60px; } -.hair_base_8_brown { +.hair_base_7_winterstar { background-image: url(spritesmith-main-2.png); background-position: -1092px -1547px; width: 90px; height: 90px; } -.customize-option.hair_base_8_brown { +.customize-option.hair_base_7_winterstar { background-image: url(spritesmith-main-2.png); background-position: -1117px -1562px; width: 60px; height: 60px; } -.hair_base_8_candycane { +.hair_base_7_yellow { background-image: url(spritesmith-main-2.png); background-position: -1183px -1547px; width: 90px; height: 90px; } -.customize-option.hair_base_8_candycane { +.customize-option.hair_base_7_yellow { background-image: url(spritesmith-main-2.png); background-position: -1208px -1562px; width: 60px; height: 60px; } -.hair_base_8_candycorn { +.hair_base_7_zombie { background-image: url(spritesmith-main-2.png); background-position: -1274px -1547px; width: 90px; height: 90px; } -.customize-option.hair_base_8_candycorn { +.customize-option.hair_base_7_zombie { background-image: url(spritesmith-main-2.png); background-position: -1299px -1562px; width: 60px; height: 60px; } -.hair_base_8_festive { +.hair_base_8_aurora { background-image: url(spritesmith-main-2.png); background-position: -1365px -1547px; width: 90px; height: 90px; } -.customize-option.hair_base_8_festive { +.customize-option.hair_base_8_aurora { background-image: url(spritesmith-main-2.png); background-position: -1390px -1562px; width: 60px; height: 60px; } -.hair_base_8_frost { +.hair_base_8_black { background-image: url(spritesmith-main-2.png); background-position: -1456px -1547px; width: 90px; height: 90px; } -.customize-option.hair_base_8_frost { +.customize-option.hair_base_8_black { background-image: url(spritesmith-main-2.png); background-position: -1481px -1562px; width: 60px; height: 60px; } -.hair_base_8_ghostwhite { +.hair_base_8_blond { background-image: url(spritesmith-main-2.png); background-position: -1547px -1547px; width: 90px; height: 90px; } -.customize-option.hair_base_8_ghostwhite { +.customize-option.hair_base_8_blond { background-image: url(spritesmith-main-2.png); background-position: -1572px -1562px; width: 60px; height: 60px; } -.hair_base_8_green { +.hair_base_8_blue { background-image: url(spritesmith-main-2.png); background-position: -1638px 0px; width: 90px; height: 90px; } -.customize-option.hair_base_8_green { +.customize-option.hair_base_8_blue { background-image: url(spritesmith-main-2.png); background-position: -1663px -15px; width: 60px; height: 60px; } -.hair_base_8_halloween { +.hair_base_8_brown { background-image: url(spritesmith-main-2.png); background-position: -1638px -91px; width: 90px; height: 90px; } -.customize-option.hair_base_8_halloween { +.customize-option.hair_base_8_brown { background-image: url(spritesmith-main-2.png); background-position: -1663px -106px; width: 60px; height: 60px; } -.hair_base_8_holly { +.hair_base_8_candycane { background-image: url(spritesmith-main-2.png); background-position: -1638px -182px; width: 90px; height: 90px; } -.customize-option.hair_base_8_holly { +.customize-option.hair_base_8_candycane { background-image: url(spritesmith-main-2.png); background-position: -1663px -197px; width: 60px; height: 60px; } -.hair_base_8_hollygreen { +.hair_base_8_candycorn { background-image: url(spritesmith-main-2.png); background-position: -1638px -273px; width: 90px; height: 90px; } -.customize-option.hair_base_8_hollygreen { +.customize-option.hair_base_8_candycorn { background-image: url(spritesmith-main-2.png); background-position: -1663px -288px; width: 60px; height: 60px; } -.hair_base_8_midnight { +.hair_base_8_festive { background-image: url(spritesmith-main-2.png); background-position: -1638px -364px; width: 90px; height: 90px; } -.customize-option.hair_base_8_midnight { +.customize-option.hair_base_8_festive { background-image: url(spritesmith-main-2.png); background-position: -1663px -379px; width: 60px; diff --git a/common/dist/sprites/spritesmith-main-2.png b/common/dist/sprites/spritesmith-main-2.png index 3e44e8b436..9eb95c8891 100644 Binary files a/common/dist/sprites/spritesmith-main-2.png and b/common/dist/sprites/spritesmith-main-2.png differ diff --git a/common/dist/sprites/spritesmith-main-3.css b/common/dist/sprites/spritesmith-main-3.css index dd29eaeae1..598ea7b0d1 100644 --- a/common/dist/sprites/spritesmith-main-3.css +++ b/common/dist/sprites/spritesmith-main-3.css @@ -1,3702 +1,3756 @@ .hair_base_8_TRUred { - background-image: url(spritesmith-main-3.png); - background-position: -364px -182px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_8_TRUred { - background-image: url(spritesmith-main-3.png); - background-position: -389px -197px; - width: 60px; - height: 60px; -} -.hair_base_8_pblue { - background-image: url(spritesmith-main-3.png); - background-position: -91px 0px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_8_pblue { - background-image: url(spritesmith-main-3.png); - background-position: -116px -15px; - width: 60px; - height: 60px; -} -.hair_base_8_pblue2 { - background-image: url(spritesmith-main-3.png); - background-position: -819px -1183px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_8_pblue2 { - background-image: url(spritesmith-main-3.png); - background-position: -844px -1198px; - width: 60px; - height: 60px; -} -.hair_base_8_peppermint { - background-image: url(spritesmith-main-3.png); - background-position: 0px -91px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_8_peppermint { - background-image: url(spritesmith-main-3.png); - background-position: -25px -106px; - width: 60px; - height: 60px; -} -.hair_base_8_pgreen { - background-image: url(spritesmith-main-3.png); - background-position: -91px -91px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_8_pgreen { - background-image: url(spritesmith-main-3.png); - background-position: -116px -106px; - width: 60px; - height: 60px; -} -.hair_base_8_pgreen2 { - background-image: url(spritesmith-main-3.png); - background-position: -182px 0px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_8_pgreen2 { - background-image: url(spritesmith-main-3.png); - background-position: -207px -15px; - width: 60px; - height: 60px; -} -.hair_base_8_porange { - background-image: url(spritesmith-main-3.png); - background-position: -182px -91px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_8_porange { - background-image: url(spritesmith-main-3.png); - background-position: -207px -106px; - width: 60px; - height: 60px; -} -.hair_base_8_porange2 { - background-image: url(spritesmith-main-3.png); - background-position: 0px -182px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_8_porange2 { - background-image: url(spritesmith-main-3.png); - background-position: -25px -197px; - width: 60px; - height: 60px; -} -.hair_base_8_ppink { - background-image: url(spritesmith-main-3.png); - background-position: -91px -182px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_8_ppink { - background-image: url(spritesmith-main-3.png); - background-position: -116px -197px; - width: 60px; - height: 60px; -} -.hair_base_8_ppink2 { - background-image: url(spritesmith-main-3.png); - background-position: -182px -182px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_8_ppink2 { - background-image: url(spritesmith-main-3.png); - background-position: -207px -197px; - width: 60px; - height: 60px; -} -.hair_base_8_ppurple { - background-image: url(spritesmith-main-3.png); - background-position: -273px 0px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_8_ppurple { - background-image: url(spritesmith-main-3.png); - background-position: -298px -15px; - width: 60px; - height: 60px; -} -.hair_base_8_ppurple2 { - background-image: url(spritesmith-main-3.png); - background-position: -273px -91px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_8_ppurple2 { - background-image: url(spritesmith-main-3.png); - background-position: -298px -106px; - width: 60px; - height: 60px; -} -.hair_base_8_pumpkin { - background-image: url(spritesmith-main-3.png); - background-position: -273px -182px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_8_pumpkin { - background-image: url(spritesmith-main-3.png); - background-position: -298px -197px; - width: 60px; - height: 60px; -} -.hair_base_8_purple { - background-image: url(spritesmith-main-3.png); - background-position: 0px -273px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_8_purple { - background-image: url(spritesmith-main-3.png); - background-position: -25px -288px; - width: 60px; - height: 60px; -} -.hair_base_8_pyellow { - background-image: url(spritesmith-main-3.png); - background-position: -91px -273px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_8_pyellow { - background-image: url(spritesmith-main-3.png); - background-position: -116px -288px; - width: 60px; - height: 60px; -} -.hair_base_8_pyellow2 { - background-image: url(spritesmith-main-3.png); - background-position: -182px -273px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_8_pyellow2 { - background-image: url(spritesmith-main-3.png); - background-position: -207px -288px; - width: 60px; - height: 60px; -} -.hair_base_8_rainbow { - background-image: url(spritesmith-main-3.png); - background-position: -273px -273px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_8_rainbow { - background-image: url(spritesmith-main-3.png); - background-position: -298px -288px; - width: 60px; - height: 60px; -} -.hair_base_8_red { - background-image: url(spritesmith-main-3.png); - background-position: -364px 0px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_8_red { - background-image: url(spritesmith-main-3.png); - background-position: -389px -15px; - width: 60px; - height: 60px; -} -.hair_base_8_snowy { - background-image: url(spritesmith-main-3.png); - background-position: -364px -91px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_8_snowy { - background-image: url(spritesmith-main-3.png); - background-position: -389px -106px; - width: 60px; - height: 60px; -} -.hair_base_8_white { - background-image: url(spritesmith-main-3.png); - background-position: -364px -273px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_8_white { - background-image: url(spritesmith-main-3.png); - background-position: -389px -288px; - width: 60px; - height: 60px; -} -.hair_base_8_winternight { - background-image: url(spritesmith-main-3.png); - background-position: 0px -364px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_8_winternight { - background-image: url(spritesmith-main-3.png); - background-position: -25px -379px; - width: 60px; - height: 60px; -} -.hair_base_8_winterstar { - background-image: url(spritesmith-main-3.png); - background-position: -91px -364px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_8_winterstar { - background-image: url(spritesmith-main-3.png); - background-position: -116px -379px; - width: 60px; - height: 60px; -} -.hair_base_8_yellow { - background-image: url(spritesmith-main-3.png); - background-position: -182px -364px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_8_yellow { - background-image: url(spritesmith-main-3.png); - background-position: -207px -379px; - width: 60px; - height: 60px; -} -.hair_base_8_zombie { - background-image: url(spritesmith-main-3.png); - background-position: -273px -364px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_8_zombie { - background-image: url(spritesmith-main-3.png); - background-position: -298px -379px; - width: 60px; - height: 60px; -} -.hair_base_9_TRUred { - background-image: url(spritesmith-main-3.png); - background-position: -91px -637px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_9_TRUred { - background-image: url(spritesmith-main-3.png); - background-position: -116px -652px; - width: 60px; - height: 60px; -} -.hair_base_9_aurora { - background-image: url(spritesmith-main-3.png); - background-position: -364px -364px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_9_aurora { - background-image: url(spritesmith-main-3.png); - background-position: -389px -379px; - width: 60px; - height: 60px; -} -.hair_base_9_black { background-image: url(spritesmith-main-3.png); background-position: -455px 0px; width: 90px; height: 90px; } -.customize-option.hair_base_9_black { +.customize-option.hair_base_8_TRUred { background-image: url(spritesmith-main-3.png); background-position: -480px -15px; width: 60px; height: 60px; } -.hair_base_9_blond { +.hair_base_8_frost { background-image: url(spritesmith-main-3.png); - background-position: -455px -91px; + background-position: -91px 0px; width: 90px; height: 90px; } -.customize-option.hair_base_9_blond { +.customize-option.hair_base_8_frost { background-image: url(spritesmith-main-3.png); - background-position: -480px -106px; + background-position: -116px -15px; width: 60px; height: 60px; } -.hair_base_9_blue { - background-image: url(spritesmith-main-3.png); - background-position: -455px -182px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_9_blue { - background-image: url(spritesmith-main-3.png); - background-position: -480px -197px; - width: 60px; - height: 60px; -} -.hair_base_9_brown { - background-image: url(spritesmith-main-3.png); - background-position: -455px -273px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_9_brown { - background-image: url(spritesmith-main-3.png); - background-position: -480px -288px; - width: 60px; - height: 60px; -} -.hair_base_9_candycane { - background-image: url(spritesmith-main-3.png); - background-position: -455px -364px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_9_candycane { - background-image: url(spritesmith-main-3.png); - background-position: -480px -379px; - width: 60px; - height: 60px; -} -.hair_base_9_candycorn { - background-image: url(spritesmith-main-3.png); - background-position: 0px -455px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_9_candycorn { - background-image: url(spritesmith-main-3.png); - background-position: -25px -470px; - width: 60px; - height: 60px; -} -.hair_base_9_festive { - background-image: url(spritesmith-main-3.png); - background-position: -91px -455px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_9_festive { - background-image: url(spritesmith-main-3.png); - background-position: -116px -470px; - width: 60px; - height: 60px; -} -.hair_base_9_frost { - background-image: url(spritesmith-main-3.png); - background-position: -182px -455px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_9_frost { - background-image: url(spritesmith-main-3.png); - background-position: -207px -470px; - width: 60px; - height: 60px; -} -.hair_base_9_ghostwhite { - background-image: url(spritesmith-main-3.png); - background-position: -273px -455px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_9_ghostwhite { - background-image: url(spritesmith-main-3.png); - background-position: -298px -470px; - width: 60px; - height: 60px; -} -.hair_base_9_green { - background-image: url(spritesmith-main-3.png); - background-position: -364px -455px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_9_green { - background-image: url(spritesmith-main-3.png); - background-position: -389px -470px; - width: 60px; - height: 60px; -} -.hair_base_9_halloween { - background-image: url(spritesmith-main-3.png); - background-position: -455px -455px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_9_halloween { - background-image: url(spritesmith-main-3.png); - background-position: -480px -470px; - width: 60px; - height: 60px; -} -.hair_base_9_holly { - background-image: url(spritesmith-main-3.png); - background-position: -546px 0px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_9_holly { - background-image: url(spritesmith-main-3.png); - background-position: -571px -15px; - width: 60px; - height: 60px; -} -.hair_base_9_hollygreen { - background-image: url(spritesmith-main-3.png); - background-position: -546px -91px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_9_hollygreen { - background-image: url(spritesmith-main-3.png); - background-position: -571px -106px; - width: 60px; - height: 60px; -} -.hair_base_9_midnight { - background-image: url(spritesmith-main-3.png); - background-position: -546px -182px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_9_midnight { - background-image: url(spritesmith-main-3.png); - background-position: -571px -197px; - width: 60px; - height: 60px; -} -.hair_base_9_pblue { - background-image: url(spritesmith-main-3.png); - background-position: -546px -273px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_9_pblue { - background-image: url(spritesmith-main-3.png); - background-position: -571px -288px; - width: 60px; - height: 60px; -} -.hair_base_9_pblue2 { - background-image: url(spritesmith-main-3.png); - background-position: -546px -364px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_9_pblue2 { - background-image: url(spritesmith-main-3.png); - background-position: -571px -379px; - width: 60px; - height: 60px; -} -.hair_base_9_peppermint { - background-image: url(spritesmith-main-3.png); - background-position: -546px -455px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_9_peppermint { - background-image: url(spritesmith-main-3.png); - background-position: -571px -470px; - width: 60px; - height: 60px; -} -.hair_base_9_pgreen { - background-image: url(spritesmith-main-3.png); - background-position: 0px -546px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_9_pgreen { - background-image: url(spritesmith-main-3.png); - background-position: -25px -561px; - width: 60px; - height: 60px; -} -.hair_base_9_pgreen2 { - background-image: url(spritesmith-main-3.png); - background-position: -91px -546px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_9_pgreen2 { - background-image: url(spritesmith-main-3.png); - background-position: -116px -561px; - width: 60px; - height: 60px; -} -.hair_base_9_porange { - background-image: url(spritesmith-main-3.png); - background-position: -182px -546px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_9_porange { - background-image: url(spritesmith-main-3.png); - background-position: -207px -561px; - width: 60px; - height: 60px; -} -.hair_base_9_porange2 { - background-image: url(spritesmith-main-3.png); - background-position: -273px -546px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_9_porange2 { - background-image: url(spritesmith-main-3.png); - background-position: -298px -561px; - width: 60px; - height: 60px; -} -.hair_base_9_ppink { - background-image: url(spritesmith-main-3.png); - background-position: -364px -546px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_9_ppink { - background-image: url(spritesmith-main-3.png); - background-position: -389px -561px; - width: 60px; - height: 60px; -} -.hair_base_9_ppink2 { - background-image: url(spritesmith-main-3.png); - background-position: -455px -546px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_9_ppink2 { - background-image: url(spritesmith-main-3.png); - background-position: -480px -561px; - width: 60px; - height: 60px; -} -.hair_base_9_ppurple { - background-image: url(spritesmith-main-3.png); - background-position: -546px -546px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_9_ppurple { - background-image: url(spritesmith-main-3.png); - background-position: -571px -561px; - width: 60px; - height: 60px; -} -.hair_base_9_ppurple2 { - background-image: url(spritesmith-main-3.png); - background-position: -637px 0px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_9_ppurple2 { - background-image: url(spritesmith-main-3.png); - background-position: -662px -15px; - width: 60px; - height: 60px; -} -.hair_base_9_pumpkin { - background-image: url(spritesmith-main-3.png); - background-position: -637px -91px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_9_pumpkin { - background-image: url(spritesmith-main-3.png); - background-position: -662px -106px; - width: 60px; - height: 60px; -} -.hair_base_9_purple { - background-image: url(spritesmith-main-3.png); - background-position: -637px -182px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_9_purple { - background-image: url(spritesmith-main-3.png); - background-position: -662px -197px; - width: 60px; - height: 60px; -} -.hair_base_9_pyellow { - background-image: url(spritesmith-main-3.png); - background-position: -637px -273px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_9_pyellow { - background-image: url(spritesmith-main-3.png); - background-position: -662px -288px; - width: 60px; - height: 60px; -} -.hair_base_9_pyellow2 { - background-image: url(spritesmith-main-3.png); - background-position: -637px -364px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_9_pyellow2 { - background-image: url(spritesmith-main-3.png); - background-position: -662px -379px; - width: 60px; - height: 60px; -} -.hair_base_9_rainbow { - background-image: url(spritesmith-main-3.png); - background-position: -637px -455px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_9_rainbow { - background-image: url(spritesmith-main-3.png); - background-position: -662px -470px; - width: 60px; - height: 60px; -} -.hair_base_9_red { - background-image: url(spritesmith-main-3.png); - background-position: -637px -546px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_9_red { - background-image: url(spritesmith-main-3.png); - background-position: -662px -561px; - width: 60px; - height: 60px; -} -.hair_base_9_snowy { - background-image: url(spritesmith-main-3.png); - background-position: 0px -637px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_9_snowy { - background-image: url(spritesmith-main-3.png); - background-position: -25px -652px; - width: 60px; - height: 60px; -} -.hair_base_9_white { - background-image: url(spritesmith-main-3.png); - background-position: -182px -637px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_9_white { - background-image: url(spritesmith-main-3.png); - background-position: -207px -652px; - width: 60px; - height: 60px; -} -.hair_base_9_winternight { - background-image: url(spritesmith-main-3.png); - background-position: -273px -637px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_9_winternight { - background-image: url(spritesmith-main-3.png); - background-position: -298px -652px; - width: 60px; - height: 60px; -} -.hair_base_9_winterstar { - background-image: url(spritesmith-main-3.png); - background-position: -364px -637px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_9_winterstar { - background-image: url(spritesmith-main-3.png); - background-position: -389px -652px; - width: 60px; - height: 60px; -} -.hair_base_9_yellow { - background-image: url(spritesmith-main-3.png); - background-position: -455px -637px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_9_yellow { - background-image: url(spritesmith-main-3.png); - background-position: -480px -652px; - width: 60px; - height: 60px; -} -.hair_base_9_zombie { - background-image: url(spritesmith-main-3.png); - background-position: -546px -637px; - width: 90px; - height: 90px; -} -.customize-option.hair_base_9_zombie { - background-image: url(spritesmith-main-3.png); - background-position: -571px -652px; - width: 60px; - height: 60px; -} -.hair_beard_1_pblue2 { - background-image: url(spritesmith-main-3.png); - background-position: -637px -637px; - width: 90px; - height: 90px; -} -.customize-option.hair_beard_1_pblue2 { - background-image: url(spritesmith-main-3.png); - background-position: -662px -652px; - width: 60px; - height: 60px; -} -.hair_beard_1_pgreen2 { - background-image: url(spritesmith-main-3.png); - background-position: -728px 0px; - width: 90px; - height: 90px; -} -.customize-option.hair_beard_1_pgreen2 { - background-image: url(spritesmith-main-3.png); - background-position: -753px -15px; - width: 60px; - height: 60px; -} -.hair_beard_1_porange2 { - background-image: url(spritesmith-main-3.png); - background-position: -728px -91px; - width: 90px; - height: 90px; -} -.customize-option.hair_beard_1_porange2 { - background-image: url(spritesmith-main-3.png); - background-position: -753px -106px; - width: 60px; - height: 60px; -} -.hair_beard_1_ppink2 { - background-image: url(spritesmith-main-3.png); - background-position: -728px -182px; - width: 90px; - height: 90px; -} -.customize-option.hair_beard_1_ppink2 { - background-image: url(spritesmith-main-3.png); - background-position: -753px -197px; - width: 60px; - height: 60px; -} -.hair_beard_1_ppurple2 { - background-image: url(spritesmith-main-3.png); - background-position: -728px -273px; - width: 90px; - height: 90px; -} -.customize-option.hair_beard_1_ppurple2 { - background-image: url(spritesmith-main-3.png); - background-position: -753px -288px; - width: 60px; - height: 60px; -} -.hair_beard_1_pyellow2 { - background-image: url(spritesmith-main-3.png); - background-position: -728px -364px; - width: 90px; - height: 90px; -} -.customize-option.hair_beard_1_pyellow2 { - background-image: url(spritesmith-main-3.png); - background-position: -753px -379px; - width: 60px; - height: 60px; -} -.hair_beard_2_pblue2 { - background-image: url(spritesmith-main-3.png); - background-position: -728px -455px; - width: 90px; - height: 90px; -} -.customize-option.hair_beard_2_pblue2 { - background-image: url(spritesmith-main-3.png); - background-position: -753px -470px; - width: 60px; - height: 60px; -} -.hair_beard_2_pgreen2 { - background-image: url(spritesmith-main-3.png); - background-position: -728px -546px; - width: 90px; - height: 90px; -} -.customize-option.hair_beard_2_pgreen2 { - background-image: url(spritesmith-main-3.png); - background-position: -753px -561px; - width: 60px; - height: 60px; -} -.hair_beard_2_porange2 { - background-image: url(spritesmith-main-3.png); - background-position: -728px -637px; - width: 90px; - height: 90px; -} -.customize-option.hair_beard_2_porange2 { - background-image: url(spritesmith-main-3.png); - background-position: -753px -652px; - width: 60px; - height: 60px; -} -.hair_beard_2_ppink2 { - background-image: url(spritesmith-main-3.png); - background-position: 0px -728px; - width: 90px; - height: 90px; -} -.customize-option.hair_beard_2_ppink2 { - background-image: url(spritesmith-main-3.png); - background-position: -25px -743px; - width: 60px; - height: 60px; -} -.hair_beard_2_ppurple2 { - background-image: url(spritesmith-main-3.png); - background-position: -91px -728px; - width: 90px; - height: 90px; -} -.customize-option.hair_beard_2_ppurple2 { - background-image: url(spritesmith-main-3.png); - background-position: -116px -743px; - width: 60px; - height: 60px; -} -.hair_beard_2_pyellow2 { - background-image: url(spritesmith-main-3.png); - background-position: -182px -728px; - width: 90px; - height: 90px; -} -.customize-option.hair_beard_2_pyellow2 { - background-image: url(spritesmith-main-3.png); - background-position: -207px -743px; - width: 60px; - height: 60px; -} -.hair_beard_3_pblue2 { - background-image: url(spritesmith-main-3.png); - background-position: -273px -728px; - width: 90px; - height: 90px; -} -.customize-option.hair_beard_3_pblue2 { - background-image: url(spritesmith-main-3.png); - background-position: -298px -743px; - width: 60px; - height: 60px; -} -.hair_beard_3_pgreen2 { - background-image: url(spritesmith-main-3.png); - background-position: -364px -728px; - width: 90px; - height: 90px; -} -.customize-option.hair_beard_3_pgreen2 { - background-image: url(spritesmith-main-3.png); - background-position: -389px -743px; - width: 60px; - height: 60px; -} -.hair_beard_3_porange2 { - background-image: url(spritesmith-main-3.png); - background-position: -455px -728px; - width: 90px; - height: 90px; -} -.customize-option.hair_beard_3_porange2 { - background-image: url(spritesmith-main-3.png); - background-position: -480px -743px; - width: 60px; - height: 60px; -} -.hair_beard_3_ppink2 { - background-image: url(spritesmith-main-3.png); - background-position: -546px -728px; - width: 90px; - height: 90px; -} -.customize-option.hair_beard_3_ppink2 { - background-image: url(spritesmith-main-3.png); - background-position: -571px -743px; - width: 60px; - height: 60px; -} -.hair_beard_3_ppurple2 { - background-image: url(spritesmith-main-3.png); - background-position: -637px -728px; - width: 90px; - height: 90px; -} -.customize-option.hair_beard_3_ppurple2 { - background-image: url(spritesmith-main-3.png); - background-position: -662px -743px; - width: 60px; - height: 60px; -} -.hair_beard_3_pyellow2 { - background-image: url(spritesmith-main-3.png); - background-position: -728px -728px; - width: 90px; - height: 90px; -} -.customize-option.hair_beard_3_pyellow2 { - background-image: url(spritesmith-main-3.png); - background-position: -753px -743px; - width: 60px; - height: 60px; -} -.hair_mustache_1_pblue2 { - background-image: url(spritesmith-main-3.png); - background-position: -819px 0px; - width: 90px; - height: 90px; -} -.customize-option.hair_mustache_1_pblue2 { - background-image: url(spritesmith-main-3.png); - background-position: -844px -15px; - width: 60px; - height: 60px; -} -.hair_mustache_1_pgreen2 { - background-image: url(spritesmith-main-3.png); - background-position: -819px -91px; - width: 90px; - height: 90px; -} -.customize-option.hair_mustache_1_pgreen2 { - background-image: url(spritesmith-main-3.png); - background-position: -844px -106px; - width: 60px; - height: 60px; -} -.hair_mustache_1_porange2 { - background-image: url(spritesmith-main-3.png); - background-position: -819px -182px; - width: 90px; - height: 90px; -} -.customize-option.hair_mustache_1_porange2 { - background-image: url(spritesmith-main-3.png); - background-position: -844px -197px; - width: 60px; - height: 60px; -} -.hair_mustache_1_ppink2 { - background-image: url(spritesmith-main-3.png); - background-position: -819px -273px; - width: 90px; - height: 90px; -} -.customize-option.hair_mustache_1_ppink2 { - background-image: url(spritesmith-main-3.png); - background-position: -844px -288px; - width: 60px; - height: 60px; -} -.hair_mustache_1_ppurple2 { - background-image: url(spritesmith-main-3.png); - background-position: -819px -364px; - width: 90px; - height: 90px; -} -.customize-option.hair_mustache_1_ppurple2 { - background-image: url(spritesmith-main-3.png); - background-position: -844px -379px; - width: 60px; - height: 60px; -} -.hair_mustache_1_pyellow2 { - background-image: url(spritesmith-main-3.png); - background-position: -819px -455px; - width: 90px; - height: 90px; -} -.customize-option.hair_mustache_1_pyellow2 { - background-image: url(spritesmith-main-3.png); - background-position: -844px -470px; - width: 60px; - height: 60px; -} -.hair_mustache_2_pblue2 { - background-image: url(spritesmith-main-3.png); - background-position: -819px -546px; - width: 90px; - height: 90px; -} -.customize-option.hair_mustache_2_pblue2 { - background-image: url(spritesmith-main-3.png); - background-position: -844px -561px; - width: 60px; - height: 60px; -} -.hair_mustache_2_pgreen2 { - background-image: url(spritesmith-main-3.png); - background-position: -819px -637px; - width: 90px; - height: 90px; -} -.customize-option.hair_mustache_2_pgreen2 { - background-image: url(spritesmith-main-3.png); - background-position: -844px -652px; - width: 60px; - height: 60px; -} -.hair_mustache_2_porange2 { - background-image: url(spritesmith-main-3.png); - background-position: -819px -728px; - width: 90px; - height: 90px; -} -.customize-option.hair_mustache_2_porange2 { - background-image: url(spritesmith-main-3.png); - background-position: -844px -743px; - width: 60px; - height: 60px; -} -.hair_mustache_2_ppink2 { - background-image: url(spritesmith-main-3.png); - background-position: 0px -819px; - width: 90px; - height: 90px; -} -.customize-option.hair_mustache_2_ppink2 { - background-image: url(spritesmith-main-3.png); - background-position: -25px -834px; - width: 60px; - height: 60px; -} -.hair_mustache_2_ppurple2 { - background-image: url(spritesmith-main-3.png); - background-position: -91px -819px; - width: 90px; - height: 90px; -} -.customize-option.hair_mustache_2_ppurple2 { - background-image: url(spritesmith-main-3.png); - background-position: -116px -834px; - width: 60px; - height: 60px; -} -.hair_mustache_2_pyellow2 { - background-image: url(spritesmith-main-3.png); - background-position: -182px -819px; - width: 90px; - height: 90px; -} -.customize-option.hair_mustache_2_pyellow2 { - background-image: url(spritesmith-main-3.png); - background-position: -207px -834px; - width: 60px; - height: 60px; -} -.broad_shirt_black { - background-image: url(spritesmith-main-3.png); - background-position: -273px -819px; - width: 90px; - height: 90px; -} -.customize-option.broad_shirt_black { - background-image: url(spritesmith-main-3.png); - background-position: -298px -849px; - width: 60px; - height: 60px; -} -.broad_shirt_blue { - background-image: url(spritesmith-main-3.png); - background-position: -364px -819px; - width: 90px; - height: 90px; -} -.customize-option.broad_shirt_blue { - background-image: url(spritesmith-main-3.png); - background-position: -389px -849px; - width: 60px; - height: 60px; -} -.broad_shirt_convict { - background-image: url(spritesmith-main-3.png); - background-position: -455px -819px; - width: 90px; - height: 90px; -} -.customize-option.broad_shirt_convict { - background-image: url(spritesmith-main-3.png); - background-position: -480px -849px; - width: 60px; - height: 60px; -} -.broad_shirt_cross { - background-image: url(spritesmith-main-3.png); - background-position: -546px -819px; - width: 90px; - height: 90px; -} -.customize-option.broad_shirt_cross { - background-image: url(spritesmith-main-3.png); - background-position: -571px -849px; - width: 60px; - height: 60px; -} -.broad_shirt_fire { - background-image: url(spritesmith-main-3.png); - background-position: -637px -819px; - width: 90px; - height: 90px; -} -.customize-option.broad_shirt_fire { - background-image: url(spritesmith-main-3.png); - background-position: -662px -849px; - width: 60px; - height: 60px; -} -.broad_shirt_green { - background-image: url(spritesmith-main-3.png); - background-position: -728px -819px; - width: 90px; - height: 90px; -} -.customize-option.broad_shirt_green { - background-image: url(spritesmith-main-3.png); - background-position: -753px -849px; - width: 60px; - height: 60px; -} -.broad_shirt_horizon { - background-image: url(spritesmith-main-3.png); - background-position: -819px -819px; - width: 90px; - height: 90px; -} -.customize-option.broad_shirt_horizon { - background-image: url(spritesmith-main-3.png); - background-position: -844px -849px; - width: 60px; - height: 60px; -} -.broad_shirt_ocean { - background-image: url(spritesmith-main-3.png); - background-position: -910px 0px; - width: 90px; - height: 90px; -} -.customize-option.broad_shirt_ocean { - background-image: url(spritesmith-main-3.png); - background-position: -935px -30px; - width: 60px; - height: 60px; -} -.broad_shirt_pink { - background-image: url(spritesmith-main-3.png); - background-position: -910px -91px; - width: 90px; - height: 90px; -} -.customize-option.broad_shirt_pink { - background-image: url(spritesmith-main-3.png); - background-position: -935px -121px; - width: 60px; - height: 60px; -} -.broad_shirt_purple { - background-image: url(spritesmith-main-3.png); - background-position: -910px -182px; - width: 90px; - height: 90px; -} -.customize-option.broad_shirt_purple { - background-image: url(spritesmith-main-3.png); - background-position: -935px -212px; - width: 60px; - height: 60px; -} -.broad_shirt_rainbow { - background-image: url(spritesmith-main-3.png); - background-position: -910px -273px; - width: 90px; - height: 90px; -} -.customize-option.broad_shirt_rainbow { - background-image: url(spritesmith-main-3.png); - background-position: -935px -303px; - width: 60px; - height: 60px; -} -.broad_shirt_redblue { - background-image: url(spritesmith-main-3.png); - background-position: -910px -364px; - width: 90px; - height: 90px; -} -.customize-option.broad_shirt_redblue { - background-image: url(spritesmith-main-3.png); - background-position: -935px -394px; - width: 60px; - height: 60px; -} -.broad_shirt_thunder { - background-image: url(spritesmith-main-3.png); - background-position: -910px -455px; - width: 90px; - height: 90px; -} -.customize-option.broad_shirt_thunder { - background-image: url(spritesmith-main-3.png); - background-position: -935px -485px; - width: 60px; - height: 60px; -} -.broad_shirt_tropical { - background-image: url(spritesmith-main-3.png); - background-position: -910px -546px; - width: 90px; - height: 90px; -} -.customize-option.broad_shirt_tropical { - background-image: url(spritesmith-main-3.png); - background-position: -935px -576px; - width: 60px; - height: 60px; -} -.broad_shirt_white { - background-image: url(spritesmith-main-3.png); - background-position: -910px -637px; - width: 90px; - height: 90px; -} -.customize-option.broad_shirt_white { - background-image: url(spritesmith-main-3.png); - background-position: -935px -667px; - width: 60px; - height: 60px; -} -.broad_shirt_yellow { - background-image: url(spritesmith-main-3.png); - background-position: -910px -728px; - width: 90px; - height: 90px; -} -.customize-option.broad_shirt_yellow { - background-image: url(spritesmith-main-3.png); - background-position: -935px -758px; - width: 60px; - height: 60px; -} -.broad_shirt_zombie { - background-image: url(spritesmith-main-3.png); - background-position: -910px -819px; - width: 90px; - height: 90px; -} -.customize-option.broad_shirt_zombie { - background-image: url(spritesmith-main-3.png); - background-position: -935px -849px; - width: 60px; - height: 60px; -} -.slim_shirt_black { - background-image: url(spritesmith-main-3.png); - background-position: 0px -910px; - width: 90px; - height: 90px; -} -.customize-option.slim_shirt_black { - background-image: url(spritesmith-main-3.png); - background-position: -25px -940px; - width: 60px; - height: 60px; -} -.slim_shirt_blue { - background-image: url(spritesmith-main-3.png); - background-position: -91px -910px; - width: 90px; - height: 90px; -} -.customize-option.slim_shirt_blue { - background-image: url(spritesmith-main-3.png); - background-position: -116px -940px; - width: 60px; - height: 60px; -} -.slim_shirt_convict { - background-image: url(spritesmith-main-3.png); - background-position: -182px -910px; - width: 90px; - height: 90px; -} -.customize-option.slim_shirt_convict { - background-image: url(spritesmith-main-3.png); - background-position: -207px -940px; - width: 60px; - height: 60px; -} -.slim_shirt_cross { - background-image: url(spritesmith-main-3.png); - background-position: -273px -910px; - width: 90px; - height: 90px; -} -.customize-option.slim_shirt_cross { - background-image: url(spritesmith-main-3.png); - background-position: -298px -940px; - width: 60px; - height: 60px; -} -.slim_shirt_fire { - background-image: url(spritesmith-main-3.png); - background-position: -364px -910px; - width: 90px; - height: 90px; -} -.customize-option.slim_shirt_fire { - background-image: url(spritesmith-main-3.png); - background-position: -389px -940px; - width: 60px; - height: 60px; -} -.slim_shirt_green { - background-image: url(spritesmith-main-3.png); - background-position: -455px -910px; - width: 90px; - height: 90px; -} -.customize-option.slim_shirt_green { - background-image: url(spritesmith-main-3.png); - background-position: -480px -940px; - width: 60px; - height: 60px; -} -.slim_shirt_horizon { - background-image: url(spritesmith-main-3.png); - background-position: -546px -910px; - width: 90px; - height: 90px; -} -.customize-option.slim_shirt_horizon { - background-image: url(spritesmith-main-3.png); - background-position: -571px -940px; - width: 60px; - height: 60px; -} -.slim_shirt_ocean { - background-image: url(spritesmith-main-3.png); - background-position: -637px -910px; - width: 90px; - height: 90px; -} -.customize-option.slim_shirt_ocean { - background-image: url(spritesmith-main-3.png); - background-position: -662px -940px; - width: 60px; - height: 60px; -} -.slim_shirt_pink { - background-image: url(spritesmith-main-3.png); - background-position: -728px -910px; - width: 90px; - height: 90px; -} -.customize-option.slim_shirt_pink { - background-image: url(spritesmith-main-3.png); - background-position: -753px -940px; - width: 60px; - height: 60px; -} -.slim_shirt_purple { - background-image: url(spritesmith-main-3.png); - background-position: -819px -910px; - width: 90px; - height: 90px; -} -.customize-option.slim_shirt_purple { - background-image: url(spritesmith-main-3.png); - background-position: -844px -940px; - width: 60px; - height: 60px; -} -.slim_shirt_rainbow { - background-image: url(spritesmith-main-3.png); - background-position: -910px -910px; - width: 90px; - height: 90px; -} -.customize-option.slim_shirt_rainbow { - background-image: url(spritesmith-main-3.png); - background-position: -935px -940px; - width: 60px; - height: 60px; -} -.slim_shirt_redblue { - background-image: url(spritesmith-main-3.png); - background-position: -1001px 0px; - width: 90px; - height: 90px; -} -.customize-option.slim_shirt_redblue { - background-image: url(spritesmith-main-3.png); - background-position: -1026px -30px; - width: 60px; - height: 60px; -} -.slim_shirt_thunder { - background-image: url(spritesmith-main-3.png); - background-position: -1001px -91px; - width: 90px; - height: 90px; -} -.customize-option.slim_shirt_thunder { - background-image: url(spritesmith-main-3.png); - background-position: -1026px -121px; - width: 60px; - height: 60px; -} -.slim_shirt_tropical { - background-image: url(spritesmith-main-3.png); - background-position: -1001px -182px; - width: 90px; - height: 90px; -} -.customize-option.slim_shirt_tropical { - background-image: url(spritesmith-main-3.png); - background-position: -1026px -212px; - width: 60px; - height: 60px; -} -.slim_shirt_white { - background-image: url(spritesmith-main-3.png); - background-position: -1001px -273px; - width: 90px; - height: 90px; -} -.customize-option.slim_shirt_white { - background-image: url(spritesmith-main-3.png); - background-position: -1026px -303px; - width: 60px; - height: 60px; -} -.slim_shirt_yellow { - background-image: url(spritesmith-main-3.png); - background-position: -1001px -364px; - width: 90px; - height: 90px; -} -.customize-option.slim_shirt_yellow { - background-image: url(spritesmith-main-3.png); - background-position: -1026px -394px; - width: 60px; - height: 60px; -} -.slim_shirt_zombie { - background-image: url(spritesmith-main-3.png); - background-position: -1001px -455px; - width: 90px; - height: 90px; -} -.customize-option.slim_shirt_zombie { - background-image: url(spritesmith-main-3.png); - background-position: -1026px -485px; - width: 60px; - height: 60px; -} -.skin_0ff591 { - background-image: url(spritesmith-main-3.png); - background-position: -1001px -637px; - width: 90px; - height: 90px; -} -.customize-option.skin_0ff591 { - background-image: url(spritesmith-main-3.png); - background-position: -1026px -652px; - width: 60px; - height: 60px; -} -.skin_0ff591_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1001px -546px; - width: 90px; - height: 90px; -} -.customize-option.skin_0ff591_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1026px -561px; - width: 60px; - height: 60px; -} -.skin_2b43f6 { - background-image: url(spritesmith-main-3.png); - background-position: -1001px -819px; - width: 90px; - height: 90px; -} -.customize-option.skin_2b43f6 { - background-image: url(spritesmith-main-3.png); - background-position: -1026px -834px; - width: 60px; - height: 60px; -} -.skin_2b43f6_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1001px -728px; - width: 90px; - height: 90px; -} -.customize-option.skin_2b43f6_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1026px -743px; - width: 60px; - height: 60px; -} -.skin_6bd049 { - background-image: url(spritesmith-main-3.png); - background-position: 0px -1001px; - width: 90px; - height: 90px; -} -.customize-option.skin_6bd049 { - background-image: url(spritesmith-main-3.png); - background-position: -25px -1016px; - width: 60px; - height: 60px; -} -.skin_6bd049_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1001px -910px; - width: 90px; - height: 90px; -} -.customize-option.skin_6bd049_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1026px -925px; - width: 60px; - height: 60px; -} -.skin_800ed0 { - background-image: url(spritesmith-main-3.png); - background-position: -182px -1001px; - width: 90px; - height: 90px; -} -.customize-option.skin_800ed0 { - background-image: url(spritesmith-main-3.png); - background-position: -207px -1016px; - width: 60px; - height: 60px; -} -.skin_800ed0_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -91px -1001px; - width: 90px; - height: 90px; -} -.customize-option.skin_800ed0_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -116px -1016px; - width: 60px; - height: 60px; -} -.skin_915533 { - background-image: url(spritesmith-main-3.png); - background-position: -364px -1001px; - width: 90px; - height: 90px; -} -.customize-option.skin_915533 { - background-image: url(spritesmith-main-3.png); - background-position: -389px -1016px; - width: 60px; - height: 60px; -} -.skin_915533_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -273px -1001px; - width: 90px; - height: 90px; -} -.customize-option.skin_915533_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -298px -1016px; - width: 60px; - height: 60px; -} -.skin_98461a { - background-image: url(spritesmith-main-3.png); - background-position: -546px -1001px; - width: 90px; - height: 90px; -} -.customize-option.skin_98461a { - background-image: url(spritesmith-main-3.png); - background-position: -571px -1016px; - width: 60px; - height: 60px; -} -.skin_98461a_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -455px -1001px; - width: 90px; - height: 90px; -} -.customize-option.skin_98461a_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -480px -1016px; - width: 60px; - height: 60px; -} -.skin_bear { - background-image: url(spritesmith-main-3.png); - background-position: -728px -1001px; - width: 90px; - height: 90px; -} -.customize-option.skin_bear { - background-image: url(spritesmith-main-3.png); - background-position: -753px -1016px; - width: 60px; - height: 60px; -} -.skin_bear_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -637px -1001px; - width: 90px; - height: 90px; -} -.customize-option.skin_bear_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -662px -1016px; - width: 60px; - height: 60px; -} -.skin_c06534 { - background-image: url(spritesmith-main-3.png); - background-position: -910px -1001px; - width: 90px; - height: 90px; -} -.customize-option.skin_c06534 { - background-image: url(spritesmith-main-3.png); - background-position: -935px -1016px; - width: 60px; - height: 60px; -} -.skin_c06534_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -819px -1001px; - width: 90px; - height: 90px; -} -.customize-option.skin_c06534_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -844px -1016px; - width: 60px; - height: 60px; -} -.skin_c3e1dc { - background-image: url(spritesmith-main-3.png); - background-position: -1092px 0px; - width: 90px; - height: 90px; -} -.customize-option.skin_c3e1dc { - background-image: url(spritesmith-main-3.png); - background-position: -1117px -15px; - width: 60px; - height: 60px; -} -.skin_c3e1dc_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1001px -1001px; - width: 90px; - height: 90px; -} -.customize-option.skin_c3e1dc_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1026px -1016px; - width: 60px; - height: 60px; -} -.skin_cactus { - background-image: url(spritesmith-main-3.png); - background-position: -1092px -182px; - width: 90px; - height: 90px; -} -.customize-option.skin_cactus { - background-image: url(spritesmith-main-3.png); - background-position: -1117px -197px; - width: 60px; - height: 60px; -} -.skin_cactus_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1092px -91px; - width: 90px; - height: 90px; -} -.customize-option.skin_cactus_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1117px -106px; - width: 60px; - height: 60px; -} -.skin_candycorn { - background-image: url(spritesmith-main-3.png); - background-position: -1092px -364px; - width: 90px; - height: 90px; -} -.customize-option.skin_candycorn { - background-image: url(spritesmith-main-3.png); - background-position: -1117px -379px; - width: 60px; - height: 60px; -} -.skin_candycorn_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1092px -273px; - width: 90px; - height: 90px; -} -.customize-option.skin_candycorn_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1117px -288px; - width: 60px; - height: 60px; -} -.skin_clownfish { - background-image: url(spritesmith-main-3.png); - background-position: -1092px -546px; - width: 90px; - height: 90px; -} -.customize-option.skin_clownfish { - background-image: url(spritesmith-main-3.png); - background-position: -1117px -561px; - width: 60px; - height: 60px; -} -.skin_clownfish_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1092px -455px; - width: 90px; - height: 90px; -} -.customize-option.skin_clownfish_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1117px -470px; - width: 60px; - height: 60px; -} -.skin_d7a9f7 { - background-image: url(spritesmith-main-3.png); - background-position: -1092px -728px; - width: 90px; - height: 90px; -} -.customize-option.skin_d7a9f7 { - background-image: url(spritesmith-main-3.png); - background-position: -1117px -743px; - width: 60px; - height: 60px; -} -.skin_d7a9f7_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1092px -637px; - width: 90px; - height: 90px; -} -.customize-option.skin_d7a9f7_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1117px -652px; - width: 60px; - height: 60px; -} -.skin_ddc994 { - background-image: url(spritesmith-main-3.png); - background-position: -1092px -910px; - width: 90px; - height: 90px; -} -.customize-option.skin_ddc994 { - background-image: url(spritesmith-main-3.png); - background-position: -1117px -925px; - width: 60px; - height: 60px; -} -.skin_ddc994_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1092px -819px; - width: 90px; - height: 90px; -} -.customize-option.skin_ddc994_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1117px -834px; - width: 60px; - height: 60px; -} -.skin_deepocean { - background-image: url(spritesmith-main-3.png); - background-position: 0px -1092px; - width: 90px; - height: 90px; -} -.customize-option.skin_deepocean { - background-image: url(spritesmith-main-3.png); - background-position: -25px -1107px; - width: 60px; - height: 60px; -} -.skin_deepocean_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1092px -1001px; - width: 90px; - height: 90px; -} -.customize-option.skin_deepocean_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1117px -1016px; - width: 60px; - height: 60px; -} -.skin_ea8349 { - background-image: url(spritesmith-main-3.png); - background-position: -182px -1092px; - width: 90px; - height: 90px; -} -.customize-option.skin_ea8349 { - background-image: url(spritesmith-main-3.png); - background-position: -207px -1107px; - width: 60px; - height: 60px; -} -.skin_ea8349_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -91px -1092px; - width: 90px; - height: 90px; -} -.customize-option.skin_ea8349_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -116px -1107px; - width: 60px; - height: 60px; -} -.skin_eb052b { - background-image: url(spritesmith-main-3.png); - background-position: -364px -1092px; - width: 90px; - height: 90px; -} -.customize-option.skin_eb052b { - background-image: url(spritesmith-main-3.png); - background-position: -389px -1107px; - width: 60px; - height: 60px; -} -.skin_eb052b_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -273px -1092px; - width: 90px; - height: 90px; -} -.customize-option.skin_eb052b_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -298px -1107px; - width: 60px; - height: 60px; -} -.skin_f5a76e { - background-image: url(spritesmith-main-3.png); - background-position: -546px -1092px; - width: 90px; - height: 90px; -} -.customize-option.skin_f5a76e { - background-image: url(spritesmith-main-3.png); - background-position: -571px -1107px; - width: 60px; - height: 60px; -} -.skin_f5a76e_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -455px -1092px; - width: 90px; - height: 90px; -} -.customize-option.skin_f5a76e_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -480px -1107px; - width: 60px; - height: 60px; -} -.skin_f5d70f { - background-image: url(spritesmith-main-3.png); - background-position: -728px -1092px; - width: 90px; - height: 90px; -} -.customize-option.skin_f5d70f { - background-image: url(spritesmith-main-3.png); - background-position: -753px -1107px; - width: 60px; - height: 60px; -} -.skin_f5d70f_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -637px -1092px; - width: 90px; - height: 90px; -} -.customize-option.skin_f5d70f_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -662px -1107px; - width: 60px; - height: 60px; -} -.skin_f69922 { - background-image: url(spritesmith-main-3.png); - background-position: -910px -1092px; - width: 90px; - height: 90px; -} -.customize-option.skin_f69922 { - background-image: url(spritesmith-main-3.png); - background-position: -935px -1107px; - width: 60px; - height: 60px; -} -.skin_f69922_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -819px -1092px; - width: 90px; - height: 90px; -} -.customize-option.skin_f69922_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -844px -1107px; - width: 60px; - height: 60px; -} -.skin_fox { - background-image: url(spritesmith-main-3.png); - background-position: -1092px -1092px; - width: 90px; - height: 90px; -} -.customize-option.skin_fox { - background-image: url(spritesmith-main-3.png); - background-position: -1117px -1107px; - width: 60px; - height: 60px; -} -.skin_fox_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1001px -1092px; - width: 90px; - height: 90px; -} -.customize-option.skin_fox_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1026px -1107px; - width: 60px; - height: 60px; -} -.skin_ghost { - background-image: url(spritesmith-main-3.png); - background-position: -1183px -91px; - width: 90px; - height: 90px; -} -.customize-option.skin_ghost { - background-image: url(spritesmith-main-3.png); - background-position: -1208px -106px; - width: 60px; - height: 60px; -} -.skin_ghost_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1183px 0px; - width: 90px; - height: 90px; -} -.customize-option.skin_ghost_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1208px -15px; - width: 60px; - height: 60px; -} -.skin_lion { - background-image: url(spritesmith-main-3.png); - background-position: -1183px -273px; - width: 90px; - height: 90px; -} -.customize-option.skin_lion { - background-image: url(spritesmith-main-3.png); - background-position: -1208px -288px; - width: 60px; - height: 60px; -} -.skin_lion_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1183px -182px; - width: 90px; - height: 90px; -} -.customize-option.skin_lion_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1208px -197px; - width: 60px; - height: 60px; -} -.skin_merblue { - background-image: url(spritesmith-main-3.png); - background-position: -1183px -455px; - width: 90px; - height: 90px; -} -.customize-option.skin_merblue { - background-image: url(spritesmith-main-3.png); - background-position: -1208px -470px; - width: 60px; - height: 60px; -} -.skin_merblue_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1183px -364px; - width: 90px; - height: 90px; -} -.customize-option.skin_merblue_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1208px -379px; - width: 60px; - height: 60px; -} -.skin_mergold { - background-image: url(spritesmith-main-3.png); - background-position: -1183px -637px; - width: 90px; - height: 90px; -} -.customize-option.skin_mergold { - background-image: url(spritesmith-main-3.png); - background-position: -1208px -652px; - width: 60px; - height: 60px; -} -.skin_mergold_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1183px -546px; - width: 90px; - height: 90px; -} -.customize-option.skin_mergold_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1208px -561px; - width: 60px; - height: 60px; -} -.skin_mergreen { - background-image: url(spritesmith-main-3.png); - background-position: -1183px -819px; - width: 90px; - height: 90px; -} -.customize-option.skin_mergreen { - background-image: url(spritesmith-main-3.png); - background-position: -1208px -834px; - width: 60px; - height: 60px; -} -.skin_mergreen_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1183px -728px; - width: 90px; - height: 90px; -} -.customize-option.skin_mergreen_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1208px -743px; - width: 60px; - height: 60px; -} -.skin_merruby { - background-image: url(spritesmith-main-3.png); - background-position: -1183px -1001px; - width: 90px; - height: 90px; -} -.customize-option.skin_merruby { - background-image: url(spritesmith-main-3.png); - background-position: -1208px -1016px; - width: 60px; - height: 60px; -} -.skin_merruby_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1183px -910px; - width: 90px; - height: 90px; -} -.customize-option.skin_merruby_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1208px -925px; - width: 60px; - height: 60px; -} -.skin_monster { - background-image: url(spritesmith-main-3.png); - background-position: 0px -1183px; - width: 90px; - height: 90px; -} -.customize-option.skin_monster { - background-image: url(spritesmith-main-3.png); - background-position: -25px -1198px; - width: 60px; - height: 60px; -} -.skin_monster_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1183px -1092px; - width: 90px; - height: 90px; -} -.customize-option.skin_monster_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1208px -1107px; - width: 60px; - height: 60px; -} -.skin_ogre { - background-image: url(spritesmith-main-3.png); - background-position: -182px -1183px; - width: 90px; - height: 90px; -} -.customize-option.skin_ogre { - background-image: url(spritesmith-main-3.png); - background-position: -207px -1198px; - width: 60px; - height: 60px; -} -.skin_ogre_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -91px -1183px; - width: 90px; - height: 90px; -} -.customize-option.skin_ogre_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -116px -1198px; - width: 60px; - height: 60px; -} -.skin_panda { - background-image: url(spritesmith-main-3.png); - background-position: -364px -1183px; - width: 90px; - height: 90px; -} -.customize-option.skin_panda { - background-image: url(spritesmith-main-3.png); - background-position: -389px -1198px; - width: 60px; - height: 60px; -} -.skin_panda_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -273px -1183px; - width: 90px; - height: 90px; -} -.customize-option.skin_panda_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -298px -1198px; - width: 60px; - height: 60px; -} -.skin_pastelBlue { - background-image: url(spritesmith-main-3.png); - background-position: -546px -1183px; - width: 90px; - height: 90px; -} -.customize-option.skin_pastelBlue { - background-image: url(spritesmith-main-3.png); - background-position: -571px -1198px; - width: 60px; - height: 60px; -} -.skin_pastelBlue_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -455px -1183px; - width: 90px; - height: 90px; -} -.customize-option.skin_pastelBlue_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -480px -1198px; - width: 60px; - height: 60px; -} -.skin_pastelGreen { - background-image: url(spritesmith-main-3.png); - background-position: -728px -1183px; - width: 90px; - height: 90px; -} -.customize-option.skin_pastelGreen { - background-image: url(spritesmith-main-3.png); - background-position: -753px -1198px; - width: 60px; - height: 60px; -} -.skin_pastelGreen_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -637px -1183px; - width: 90px; - height: 90px; -} -.customize-option.skin_pastelGreen_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -662px -1198px; - width: 60px; - height: 60px; -} -.skin_pastelOrange { +.hair_base_8_ghostwhite { background-image: url(spritesmith-main-3.png); background-position: -910px -1183px; width: 90px; height: 90px; } -.customize-option.skin_pastelOrange { +.customize-option.hair_base_8_ghostwhite { background-image: url(spritesmith-main-3.png); background-position: -935px -1198px; width: 60px; height: 60px; } -.skin_pastelOrange_sleep { +.hair_base_8_green { background-image: url(spritesmith-main-3.png); - background-position: 0px 0px; + background-position: 0px -91px; width: 90px; height: 90px; } -.customize-option.skin_pastelOrange_sleep { +.customize-option.hair_base_8_green { background-image: url(spritesmith-main-3.png); - background-position: -25px -15px; + background-position: -25px -106px; width: 60px; height: 60px; } -.skin_pastelPink { +.hair_base_8_halloween { background-image: url(spritesmith-main-3.png); - background-position: -1092px -1183px; + background-position: -91px -91px; width: 90px; height: 90px; } -.customize-option.skin_pastelPink { +.customize-option.hair_base_8_halloween { background-image: url(spritesmith-main-3.png); - background-position: -1117px -1198px; + background-position: -116px -106px; width: 60px; height: 60px; } -.skin_pastelPink_sleep { +.hair_base_8_holly { + background-image: url(spritesmith-main-3.png); + background-position: -182px 0px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_8_holly { + background-image: url(spritesmith-main-3.png); + background-position: -207px -15px; + width: 60px; + height: 60px; +} +.hair_base_8_hollygreen { + background-image: url(spritesmith-main-3.png); + background-position: -182px -91px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_8_hollygreen { + background-image: url(spritesmith-main-3.png); + background-position: -207px -106px; + width: 60px; + height: 60px; +} +.hair_base_8_midnight { + background-image: url(spritesmith-main-3.png); + background-position: 0px -182px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_8_midnight { + background-image: url(spritesmith-main-3.png); + background-position: -25px -197px; + width: 60px; + height: 60px; +} +.hair_base_8_pblue { + background-image: url(spritesmith-main-3.png); + background-position: -91px -182px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_8_pblue { + background-image: url(spritesmith-main-3.png); + background-position: -116px -197px; + width: 60px; + height: 60px; +} +.hair_base_8_pblue2 { + background-image: url(spritesmith-main-3.png); + background-position: -182px -182px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_8_pblue2 { + background-image: url(spritesmith-main-3.png); + background-position: -207px -197px; + width: 60px; + height: 60px; +} +.hair_base_8_peppermint { + background-image: url(spritesmith-main-3.png); + background-position: -273px 0px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_8_peppermint { + background-image: url(spritesmith-main-3.png); + background-position: -298px -15px; + width: 60px; + height: 60px; +} +.hair_base_8_pgreen { + background-image: url(spritesmith-main-3.png); + background-position: -273px -91px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_8_pgreen { + background-image: url(spritesmith-main-3.png); + background-position: -298px -106px; + width: 60px; + height: 60px; +} +.hair_base_8_pgreen2 { + background-image: url(spritesmith-main-3.png); + background-position: -273px -182px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_8_pgreen2 { + background-image: url(spritesmith-main-3.png); + background-position: -298px -197px; + width: 60px; + height: 60px; +} +.hair_base_8_porange { + background-image: url(spritesmith-main-3.png); + background-position: 0px -273px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_8_porange { + background-image: url(spritesmith-main-3.png); + background-position: -25px -288px; + width: 60px; + height: 60px; +} +.hair_base_8_porange2 { + background-image: url(spritesmith-main-3.png); + background-position: -91px -273px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_8_porange2 { + background-image: url(spritesmith-main-3.png); + background-position: -116px -288px; + width: 60px; + height: 60px; +} +.hair_base_8_ppink { + background-image: url(spritesmith-main-3.png); + background-position: -182px -273px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_8_ppink { + background-image: url(spritesmith-main-3.png); + background-position: -207px -288px; + width: 60px; + height: 60px; +} +.hair_base_8_ppink2 { + background-image: url(spritesmith-main-3.png); + background-position: -273px -273px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_8_ppink2 { + background-image: url(spritesmith-main-3.png); + background-position: -298px -288px; + width: 60px; + height: 60px; +} +.hair_base_8_ppurple { + background-image: url(spritesmith-main-3.png); + background-position: -364px 0px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_8_ppurple { + background-image: url(spritesmith-main-3.png); + background-position: -389px -15px; + width: 60px; + height: 60px; +} +.hair_base_8_ppurple2 { + background-image: url(spritesmith-main-3.png); + background-position: -364px -91px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_8_ppurple2 { + background-image: url(spritesmith-main-3.png); + background-position: -389px -106px; + width: 60px; + height: 60px; +} +.hair_base_8_pumpkin { + background-image: url(spritesmith-main-3.png); + background-position: -364px -182px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_8_pumpkin { + background-image: url(spritesmith-main-3.png); + background-position: -389px -197px; + width: 60px; + height: 60px; +} +.hair_base_8_purple { + background-image: url(spritesmith-main-3.png); + background-position: -364px -273px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_8_purple { + background-image: url(spritesmith-main-3.png); + background-position: -389px -288px; + width: 60px; + height: 60px; +} +.hair_base_8_pyellow { + background-image: url(spritesmith-main-3.png); + background-position: 0px -364px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_8_pyellow { + background-image: url(spritesmith-main-3.png); + background-position: -25px -379px; + width: 60px; + height: 60px; +} +.hair_base_8_pyellow2 { + background-image: url(spritesmith-main-3.png); + background-position: -91px -364px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_8_pyellow2 { + background-image: url(spritesmith-main-3.png); + background-position: -116px -379px; + width: 60px; + height: 60px; +} +.hair_base_8_rainbow { + background-image: url(spritesmith-main-3.png); + background-position: -182px -364px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_8_rainbow { + background-image: url(spritesmith-main-3.png); + background-position: -207px -379px; + width: 60px; + height: 60px; +} +.hair_base_8_red { + background-image: url(spritesmith-main-3.png); + background-position: -273px -364px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_8_red { + background-image: url(spritesmith-main-3.png); + background-position: -298px -379px; + width: 60px; + height: 60px; +} +.hair_base_8_snowy { + background-image: url(spritesmith-main-3.png); + background-position: -364px -364px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_8_snowy { + background-image: url(spritesmith-main-3.png); + background-position: -389px -379px; + width: 60px; + height: 60px; +} +.hair_base_8_white { + background-image: url(spritesmith-main-3.png); + background-position: -455px -91px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_8_white { + background-image: url(spritesmith-main-3.png); + background-position: -480px -106px; + width: 60px; + height: 60px; +} +.hair_base_8_winternight { + background-image: url(spritesmith-main-3.png); + background-position: -455px -182px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_8_winternight { + background-image: url(spritesmith-main-3.png); + background-position: -480px -197px; + width: 60px; + height: 60px; +} +.hair_base_8_winterstar { + background-image: url(spritesmith-main-3.png); + background-position: -455px -273px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_8_winterstar { + background-image: url(spritesmith-main-3.png); + background-position: -480px -288px; + width: 60px; + height: 60px; +} +.hair_base_8_yellow { + background-image: url(spritesmith-main-3.png); + background-position: -455px -364px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_8_yellow { + background-image: url(spritesmith-main-3.png); + background-position: -480px -379px; + width: 60px; + height: 60px; +} +.hair_base_8_zombie { + background-image: url(spritesmith-main-3.png); + background-position: 0px -455px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_8_zombie { + background-image: url(spritesmith-main-3.png); + background-position: -25px -470px; + width: 60px; + height: 60px; +} +.hair_base_9_TRUred { + background-image: url(spritesmith-main-3.png); + background-position: -728px 0px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_9_TRUred { + background-image: url(spritesmith-main-3.png); + background-position: -753px -15px; + width: 60px; + height: 60px; +} +.hair_base_9_aurora { + background-image: url(spritesmith-main-3.png); + background-position: -91px -455px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_9_aurora { + background-image: url(spritesmith-main-3.png); + background-position: -116px -470px; + width: 60px; + height: 60px; +} +.hair_base_9_black { + background-image: url(spritesmith-main-3.png); + background-position: -182px -455px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_9_black { + background-image: url(spritesmith-main-3.png); + background-position: -207px -470px; + width: 60px; + height: 60px; +} +.hair_base_9_blond { + background-image: url(spritesmith-main-3.png); + background-position: -273px -455px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_9_blond { + background-image: url(spritesmith-main-3.png); + background-position: -298px -470px; + width: 60px; + height: 60px; +} +.hair_base_9_blue { + background-image: url(spritesmith-main-3.png); + background-position: -364px -455px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_9_blue { + background-image: url(spritesmith-main-3.png); + background-position: -389px -470px; + width: 60px; + height: 60px; +} +.hair_base_9_brown { + background-image: url(spritesmith-main-3.png); + background-position: -455px -455px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_9_brown { + background-image: url(spritesmith-main-3.png); + background-position: -480px -470px; + width: 60px; + height: 60px; +} +.hair_base_9_candycane { + background-image: url(spritesmith-main-3.png); + background-position: -546px 0px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_9_candycane { + background-image: url(spritesmith-main-3.png); + background-position: -571px -15px; + width: 60px; + height: 60px; +} +.hair_base_9_candycorn { + background-image: url(spritesmith-main-3.png); + background-position: -546px -91px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_9_candycorn { + background-image: url(spritesmith-main-3.png); + background-position: -571px -106px; + width: 60px; + height: 60px; +} +.hair_base_9_festive { + background-image: url(spritesmith-main-3.png); + background-position: -546px -182px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_9_festive { + background-image: url(spritesmith-main-3.png); + background-position: -571px -197px; + width: 60px; + height: 60px; +} +.hair_base_9_frost { + background-image: url(spritesmith-main-3.png); + background-position: -546px -273px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_9_frost { + background-image: url(spritesmith-main-3.png); + background-position: -571px -288px; + width: 60px; + height: 60px; +} +.hair_base_9_ghostwhite { + background-image: url(spritesmith-main-3.png); + background-position: -546px -364px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_9_ghostwhite { + background-image: url(spritesmith-main-3.png); + background-position: -571px -379px; + width: 60px; + height: 60px; +} +.hair_base_9_green { + background-image: url(spritesmith-main-3.png); + background-position: -546px -455px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_9_green { + background-image: url(spritesmith-main-3.png); + background-position: -571px -470px; + width: 60px; + height: 60px; +} +.hair_base_9_halloween { + background-image: url(spritesmith-main-3.png); + background-position: 0px -546px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_9_halloween { + background-image: url(spritesmith-main-3.png); + background-position: -25px -561px; + width: 60px; + height: 60px; +} +.hair_base_9_holly { + background-image: url(spritesmith-main-3.png); + background-position: -91px -546px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_9_holly { + background-image: url(spritesmith-main-3.png); + background-position: -116px -561px; + width: 60px; + height: 60px; +} +.hair_base_9_hollygreen { + background-image: url(spritesmith-main-3.png); + background-position: -182px -546px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_9_hollygreen { + background-image: url(spritesmith-main-3.png); + background-position: -207px -561px; + width: 60px; + height: 60px; +} +.hair_base_9_midnight { + background-image: url(spritesmith-main-3.png); + background-position: -273px -546px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_9_midnight { + background-image: url(spritesmith-main-3.png); + background-position: -298px -561px; + width: 60px; + height: 60px; +} +.hair_base_9_pblue { + background-image: url(spritesmith-main-3.png); + background-position: -364px -546px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_9_pblue { + background-image: url(spritesmith-main-3.png); + background-position: -389px -561px; + width: 60px; + height: 60px; +} +.hair_base_9_pblue2 { + background-image: url(spritesmith-main-3.png); + background-position: -455px -546px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_9_pblue2 { + background-image: url(spritesmith-main-3.png); + background-position: -480px -561px; + width: 60px; + height: 60px; +} +.hair_base_9_peppermint { + background-image: url(spritesmith-main-3.png); + background-position: -546px -546px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_9_peppermint { + background-image: url(spritesmith-main-3.png); + background-position: -571px -561px; + width: 60px; + height: 60px; +} +.hair_base_9_pgreen { + background-image: url(spritesmith-main-3.png); + background-position: -637px 0px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_9_pgreen { + background-image: url(spritesmith-main-3.png); + background-position: -662px -15px; + width: 60px; + height: 60px; +} +.hair_base_9_pgreen2 { + background-image: url(spritesmith-main-3.png); + background-position: -637px -91px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_9_pgreen2 { + background-image: url(spritesmith-main-3.png); + background-position: -662px -106px; + width: 60px; + height: 60px; +} +.hair_base_9_porange { + background-image: url(spritesmith-main-3.png); + background-position: -637px -182px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_9_porange { + background-image: url(spritesmith-main-3.png); + background-position: -662px -197px; + width: 60px; + height: 60px; +} +.hair_base_9_porange2 { + background-image: url(spritesmith-main-3.png); + background-position: -637px -273px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_9_porange2 { + background-image: url(spritesmith-main-3.png); + background-position: -662px -288px; + width: 60px; + height: 60px; +} +.hair_base_9_ppink { + background-image: url(spritesmith-main-3.png); + background-position: -637px -364px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_9_ppink { + background-image: url(spritesmith-main-3.png); + background-position: -662px -379px; + width: 60px; + height: 60px; +} +.hair_base_9_ppink2 { + background-image: url(spritesmith-main-3.png); + background-position: -637px -455px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_9_ppink2 { + background-image: url(spritesmith-main-3.png); + background-position: -662px -470px; + width: 60px; + height: 60px; +} +.hair_base_9_ppurple { + background-image: url(spritesmith-main-3.png); + background-position: -637px -546px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_9_ppurple { + background-image: url(spritesmith-main-3.png); + background-position: -662px -561px; + width: 60px; + height: 60px; +} +.hair_base_9_ppurple2 { + background-image: url(spritesmith-main-3.png); + background-position: 0px -637px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_9_ppurple2 { + background-image: url(spritesmith-main-3.png); + background-position: -25px -652px; + width: 60px; + height: 60px; +} +.hair_base_9_pumpkin { + background-image: url(spritesmith-main-3.png); + background-position: -91px -637px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_9_pumpkin { + background-image: url(spritesmith-main-3.png); + background-position: -116px -652px; + width: 60px; + height: 60px; +} +.hair_base_9_purple { + background-image: url(spritesmith-main-3.png); + background-position: -182px -637px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_9_purple { + background-image: url(spritesmith-main-3.png); + background-position: -207px -652px; + width: 60px; + height: 60px; +} +.hair_base_9_pyellow { + background-image: url(spritesmith-main-3.png); + background-position: -273px -637px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_9_pyellow { + background-image: url(spritesmith-main-3.png); + background-position: -298px -652px; + width: 60px; + height: 60px; +} +.hair_base_9_pyellow2 { + background-image: url(spritesmith-main-3.png); + background-position: -364px -637px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_9_pyellow2 { + background-image: url(spritesmith-main-3.png); + background-position: -389px -652px; + width: 60px; + height: 60px; +} +.hair_base_9_rainbow { + background-image: url(spritesmith-main-3.png); + background-position: -455px -637px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_9_rainbow { + background-image: url(spritesmith-main-3.png); + background-position: -480px -652px; + width: 60px; + height: 60px; +} +.hair_base_9_red { + background-image: url(spritesmith-main-3.png); + background-position: -546px -637px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_9_red { + background-image: url(spritesmith-main-3.png); + background-position: -571px -652px; + width: 60px; + height: 60px; +} +.hair_base_9_snowy { + background-image: url(spritesmith-main-3.png); + background-position: -637px -637px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_9_snowy { + background-image: url(spritesmith-main-3.png); + background-position: -662px -652px; + width: 60px; + height: 60px; +} +.hair_base_9_white { + background-image: url(spritesmith-main-3.png); + background-position: -728px -91px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_9_white { + background-image: url(spritesmith-main-3.png); + background-position: -753px -106px; + width: 60px; + height: 60px; +} +.hair_base_9_winternight { + background-image: url(spritesmith-main-3.png); + background-position: -728px -182px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_9_winternight { + background-image: url(spritesmith-main-3.png); + background-position: -753px -197px; + width: 60px; + height: 60px; +} +.hair_base_9_winterstar { + background-image: url(spritesmith-main-3.png); + background-position: -728px -273px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_9_winterstar { + background-image: url(spritesmith-main-3.png); + background-position: -753px -288px; + width: 60px; + height: 60px; +} +.hair_base_9_yellow { + background-image: url(spritesmith-main-3.png); + background-position: -728px -364px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_9_yellow { + background-image: url(spritesmith-main-3.png); + background-position: -753px -379px; + width: 60px; + height: 60px; +} +.hair_base_9_zombie { + background-image: url(spritesmith-main-3.png); + background-position: -728px -455px; + width: 90px; + height: 90px; +} +.customize-option.hair_base_9_zombie { + background-image: url(spritesmith-main-3.png); + background-position: -753px -470px; + width: 60px; + height: 60px; +} +.hair_beard_1_pblue2 { + background-image: url(spritesmith-main-3.png); + background-position: -728px -546px; + width: 90px; + height: 90px; +} +.customize-option.hair_beard_1_pblue2 { + background-image: url(spritesmith-main-3.png); + background-position: -753px -561px; + width: 60px; + height: 60px; +} +.hair_beard_1_pgreen2 { + background-image: url(spritesmith-main-3.png); + background-position: -728px -637px; + width: 90px; + height: 90px; +} +.customize-option.hair_beard_1_pgreen2 { + background-image: url(spritesmith-main-3.png); + background-position: -753px -652px; + width: 60px; + height: 60px; +} +.hair_beard_1_porange2 { + background-image: url(spritesmith-main-3.png); + background-position: 0px -728px; + width: 90px; + height: 90px; +} +.customize-option.hair_beard_1_porange2 { + background-image: url(spritesmith-main-3.png); + background-position: -25px -743px; + width: 60px; + height: 60px; +} +.hair_beard_1_ppink2 { + background-image: url(spritesmith-main-3.png); + background-position: -91px -728px; + width: 90px; + height: 90px; +} +.customize-option.hair_beard_1_ppink2 { + background-image: url(spritesmith-main-3.png); + background-position: -116px -743px; + width: 60px; + height: 60px; +} +.hair_beard_1_ppurple2 { + background-image: url(spritesmith-main-3.png); + background-position: -182px -728px; + width: 90px; + height: 90px; +} +.customize-option.hair_beard_1_ppurple2 { + background-image: url(spritesmith-main-3.png); + background-position: -207px -743px; + width: 60px; + height: 60px; +} +.hair_beard_1_pyellow2 { + background-image: url(spritesmith-main-3.png); + background-position: -273px -728px; + width: 90px; + height: 90px; +} +.customize-option.hair_beard_1_pyellow2 { + background-image: url(spritesmith-main-3.png); + background-position: -298px -743px; + width: 60px; + height: 60px; +} +.hair_beard_2_pblue2 { + background-image: url(spritesmith-main-3.png); + background-position: -364px -728px; + width: 90px; + height: 90px; +} +.customize-option.hair_beard_2_pblue2 { + background-image: url(spritesmith-main-3.png); + background-position: -389px -743px; + width: 60px; + height: 60px; +} +.hair_beard_2_pgreen2 { + background-image: url(spritesmith-main-3.png); + background-position: -455px -728px; + width: 90px; + height: 90px; +} +.customize-option.hair_beard_2_pgreen2 { + background-image: url(spritesmith-main-3.png); + background-position: -480px -743px; + width: 60px; + height: 60px; +} +.hair_beard_2_porange2 { + background-image: url(spritesmith-main-3.png); + background-position: -546px -728px; + width: 90px; + height: 90px; +} +.customize-option.hair_beard_2_porange2 { + background-image: url(spritesmith-main-3.png); + background-position: -571px -743px; + width: 60px; + height: 60px; +} +.hair_beard_2_ppink2 { + background-image: url(spritesmith-main-3.png); + background-position: -637px -728px; + width: 90px; + height: 90px; +} +.customize-option.hair_beard_2_ppink2 { + background-image: url(spritesmith-main-3.png); + background-position: -662px -743px; + width: 60px; + height: 60px; +} +.hair_beard_2_ppurple2 { + background-image: url(spritesmith-main-3.png); + background-position: -728px -728px; + width: 90px; + height: 90px; +} +.customize-option.hair_beard_2_ppurple2 { + background-image: url(spritesmith-main-3.png); + background-position: -753px -743px; + width: 60px; + height: 60px; +} +.hair_beard_2_pyellow2 { + background-image: url(spritesmith-main-3.png); + background-position: -819px 0px; + width: 90px; + height: 90px; +} +.customize-option.hair_beard_2_pyellow2 { + background-image: url(spritesmith-main-3.png); + background-position: -844px -15px; + width: 60px; + height: 60px; +} +.hair_beard_3_pblue2 { + background-image: url(spritesmith-main-3.png); + background-position: -819px -91px; + width: 90px; + height: 90px; +} +.customize-option.hair_beard_3_pblue2 { + background-image: url(spritesmith-main-3.png); + background-position: -844px -106px; + width: 60px; + height: 60px; +} +.hair_beard_3_pgreen2 { + background-image: url(spritesmith-main-3.png); + background-position: -819px -182px; + width: 90px; + height: 90px; +} +.customize-option.hair_beard_3_pgreen2 { + background-image: url(spritesmith-main-3.png); + background-position: -844px -197px; + width: 60px; + height: 60px; +} +.hair_beard_3_porange2 { + background-image: url(spritesmith-main-3.png); + background-position: -819px -273px; + width: 90px; + height: 90px; +} +.customize-option.hair_beard_3_porange2 { + background-image: url(spritesmith-main-3.png); + background-position: -844px -288px; + width: 60px; + height: 60px; +} +.hair_beard_3_ppink2 { + background-image: url(spritesmith-main-3.png); + background-position: -819px -364px; + width: 90px; + height: 90px; +} +.customize-option.hair_beard_3_ppink2 { + background-image: url(spritesmith-main-3.png); + background-position: -844px -379px; + width: 60px; + height: 60px; +} +.hair_beard_3_ppurple2 { + background-image: url(spritesmith-main-3.png); + background-position: -819px -455px; + width: 90px; + height: 90px; +} +.customize-option.hair_beard_3_ppurple2 { + background-image: url(spritesmith-main-3.png); + background-position: -844px -470px; + width: 60px; + height: 60px; +} +.hair_beard_3_pyellow2 { + background-image: url(spritesmith-main-3.png); + background-position: -819px -546px; + width: 90px; + height: 90px; +} +.customize-option.hair_beard_3_pyellow2 { + background-image: url(spritesmith-main-3.png); + background-position: -844px -561px; + width: 60px; + height: 60px; +} +.hair_mustache_1_pblue2 { + background-image: url(spritesmith-main-3.png); + background-position: -819px -637px; + width: 90px; + height: 90px; +} +.customize-option.hair_mustache_1_pblue2 { + background-image: url(spritesmith-main-3.png); + background-position: -844px -652px; + width: 60px; + height: 60px; +} +.hair_mustache_1_pgreen2 { + background-image: url(spritesmith-main-3.png); + background-position: -819px -728px; + width: 90px; + height: 90px; +} +.customize-option.hair_mustache_1_pgreen2 { + background-image: url(spritesmith-main-3.png); + background-position: -844px -743px; + width: 60px; + height: 60px; +} +.hair_mustache_1_porange2 { + background-image: url(spritesmith-main-3.png); + background-position: 0px -819px; + width: 90px; + height: 90px; +} +.customize-option.hair_mustache_1_porange2 { + background-image: url(spritesmith-main-3.png); + background-position: -25px -834px; + width: 60px; + height: 60px; +} +.hair_mustache_1_ppink2 { + background-image: url(spritesmith-main-3.png); + background-position: -91px -819px; + width: 90px; + height: 90px; +} +.customize-option.hair_mustache_1_ppink2 { + background-image: url(spritesmith-main-3.png); + background-position: -116px -834px; + width: 60px; + height: 60px; +} +.hair_mustache_1_ppurple2 { + background-image: url(spritesmith-main-3.png); + background-position: -182px -819px; + width: 90px; + height: 90px; +} +.customize-option.hair_mustache_1_ppurple2 { + background-image: url(spritesmith-main-3.png); + background-position: -207px -834px; + width: 60px; + height: 60px; +} +.hair_mustache_1_pyellow2 { + background-image: url(spritesmith-main-3.png); + background-position: -273px -819px; + width: 90px; + height: 90px; +} +.customize-option.hair_mustache_1_pyellow2 { + background-image: url(spritesmith-main-3.png); + background-position: -298px -834px; + width: 60px; + height: 60px; +} +.hair_mustache_2_pblue2 { + background-image: url(spritesmith-main-3.png); + background-position: -364px -819px; + width: 90px; + height: 90px; +} +.customize-option.hair_mustache_2_pblue2 { + background-image: url(spritesmith-main-3.png); + background-position: -389px -834px; + width: 60px; + height: 60px; +} +.hair_mustache_2_pgreen2 { + background-image: url(spritesmith-main-3.png); + background-position: -455px -819px; + width: 90px; + height: 90px; +} +.customize-option.hair_mustache_2_pgreen2 { + background-image: url(spritesmith-main-3.png); + background-position: -480px -834px; + width: 60px; + height: 60px; +} +.hair_mustache_2_porange2 { + background-image: url(spritesmith-main-3.png); + background-position: -546px -819px; + width: 90px; + height: 90px; +} +.customize-option.hair_mustache_2_porange2 { + background-image: url(spritesmith-main-3.png); + background-position: -571px -834px; + width: 60px; + height: 60px; +} +.hair_mustache_2_ppink2 { + background-image: url(spritesmith-main-3.png); + background-position: -637px -819px; + width: 90px; + height: 90px; +} +.customize-option.hair_mustache_2_ppink2 { + background-image: url(spritesmith-main-3.png); + background-position: -662px -834px; + width: 60px; + height: 60px; +} +.hair_mustache_2_ppurple2 { + background-image: url(spritesmith-main-3.png); + background-position: -728px -819px; + width: 90px; + height: 90px; +} +.customize-option.hair_mustache_2_ppurple2 { + background-image: url(spritesmith-main-3.png); + background-position: -753px -834px; + width: 60px; + height: 60px; +} +.hair_mustache_2_pyellow2 { + background-image: url(spritesmith-main-3.png); + background-position: -819px -819px; + width: 90px; + height: 90px; +} +.customize-option.hair_mustache_2_pyellow2 { + background-image: url(spritesmith-main-3.png); + background-position: -844px -834px; + width: 60px; + height: 60px; +} +.broad_shirt_black { + background-image: url(spritesmith-main-3.png); + background-position: -910px 0px; + width: 90px; + height: 90px; +} +.customize-option.broad_shirt_black { + background-image: url(spritesmith-main-3.png); + background-position: -935px -30px; + width: 60px; + height: 60px; +} +.broad_shirt_blue { + background-image: url(spritesmith-main-3.png); + background-position: -910px -91px; + width: 90px; + height: 90px; +} +.customize-option.broad_shirt_blue { + background-image: url(spritesmith-main-3.png); + background-position: -935px -121px; + width: 60px; + height: 60px; +} +.broad_shirt_convict { + background-image: url(spritesmith-main-3.png); + background-position: -910px -182px; + width: 90px; + height: 90px; +} +.customize-option.broad_shirt_convict { + background-image: url(spritesmith-main-3.png); + background-position: -935px -212px; + width: 60px; + height: 60px; +} +.broad_shirt_cross { + background-image: url(spritesmith-main-3.png); + background-position: -910px -273px; + width: 90px; + height: 90px; +} +.customize-option.broad_shirt_cross { + background-image: url(spritesmith-main-3.png); + background-position: -935px -303px; + width: 60px; + height: 60px; +} +.broad_shirt_fire { + background-image: url(spritesmith-main-3.png); + background-position: -910px -364px; + width: 90px; + height: 90px; +} +.customize-option.broad_shirt_fire { + background-image: url(spritesmith-main-3.png); + background-position: -935px -394px; + width: 60px; + height: 60px; +} +.broad_shirt_green { + background-image: url(spritesmith-main-3.png); + background-position: -910px -455px; + width: 90px; + height: 90px; +} +.customize-option.broad_shirt_green { + background-image: url(spritesmith-main-3.png); + background-position: -935px -485px; + width: 60px; + height: 60px; +} +.broad_shirt_horizon { + background-image: url(spritesmith-main-3.png); + background-position: -910px -546px; + width: 90px; + height: 90px; +} +.customize-option.broad_shirt_horizon { + background-image: url(spritesmith-main-3.png); + background-position: -935px -576px; + width: 60px; + height: 60px; +} +.broad_shirt_ocean { + background-image: url(spritesmith-main-3.png); + background-position: -910px -637px; + width: 90px; + height: 90px; +} +.customize-option.broad_shirt_ocean { + background-image: url(spritesmith-main-3.png); + background-position: -935px -667px; + width: 60px; + height: 60px; +} +.broad_shirt_pink { + background-image: url(spritesmith-main-3.png); + background-position: -910px -728px; + width: 90px; + height: 90px; +} +.customize-option.broad_shirt_pink { + background-image: url(spritesmith-main-3.png); + background-position: -935px -758px; + width: 60px; + height: 60px; +} +.broad_shirt_purple { + background-image: url(spritesmith-main-3.png); + background-position: -910px -819px; + width: 90px; + height: 90px; +} +.customize-option.broad_shirt_purple { + background-image: url(spritesmith-main-3.png); + background-position: -935px -849px; + width: 60px; + height: 60px; +} +.broad_shirt_rainbow { + background-image: url(spritesmith-main-3.png); + background-position: 0px -910px; + width: 90px; + height: 90px; +} +.customize-option.broad_shirt_rainbow { + background-image: url(spritesmith-main-3.png); + background-position: -25px -940px; + width: 60px; + height: 60px; +} +.broad_shirt_redblue { + background-image: url(spritesmith-main-3.png); + background-position: -91px -910px; + width: 90px; + height: 90px; +} +.customize-option.broad_shirt_redblue { + background-image: url(spritesmith-main-3.png); + background-position: -116px -940px; + width: 60px; + height: 60px; +} +.broad_shirt_thunder { + background-image: url(spritesmith-main-3.png); + background-position: -182px -910px; + width: 90px; + height: 90px; +} +.customize-option.broad_shirt_thunder { + background-image: url(spritesmith-main-3.png); + background-position: -207px -940px; + width: 60px; + height: 60px; +} +.broad_shirt_tropical { + background-image: url(spritesmith-main-3.png); + background-position: -273px -910px; + width: 90px; + height: 90px; +} +.customize-option.broad_shirt_tropical { + background-image: url(spritesmith-main-3.png); + background-position: -298px -940px; + width: 60px; + height: 60px; +} +.broad_shirt_white { + background-image: url(spritesmith-main-3.png); + background-position: -364px -910px; + width: 90px; + height: 90px; +} +.customize-option.broad_shirt_white { + background-image: url(spritesmith-main-3.png); + background-position: -389px -940px; + width: 60px; + height: 60px; +} +.broad_shirt_yellow { + background-image: url(spritesmith-main-3.png); + background-position: -455px -910px; + width: 90px; + height: 90px; +} +.customize-option.broad_shirt_yellow { + background-image: url(spritesmith-main-3.png); + background-position: -480px -940px; + width: 60px; + height: 60px; +} +.broad_shirt_zombie { + background-image: url(spritesmith-main-3.png); + background-position: -546px -910px; + width: 90px; + height: 90px; +} +.customize-option.broad_shirt_zombie { + background-image: url(spritesmith-main-3.png); + background-position: -571px -940px; + width: 60px; + height: 60px; +} +.slim_shirt_black { + background-image: url(spritesmith-main-3.png); + background-position: -637px -910px; + width: 90px; + height: 90px; +} +.customize-option.slim_shirt_black { + background-image: url(spritesmith-main-3.png); + background-position: -662px -940px; + width: 60px; + height: 60px; +} +.slim_shirt_blue { + background-image: url(spritesmith-main-3.png); + background-position: -728px -910px; + width: 90px; + height: 90px; +} +.customize-option.slim_shirt_blue { + background-image: url(spritesmith-main-3.png); + background-position: -753px -940px; + width: 60px; + height: 60px; +} +.slim_shirt_convict { + background-image: url(spritesmith-main-3.png); + background-position: -819px -910px; + width: 90px; + height: 90px; +} +.customize-option.slim_shirt_convict { + background-image: url(spritesmith-main-3.png); + background-position: -844px -940px; + width: 60px; + height: 60px; +} +.slim_shirt_cross { + background-image: url(spritesmith-main-3.png); + background-position: -910px -910px; + width: 90px; + height: 90px; +} +.customize-option.slim_shirt_cross { + background-image: url(spritesmith-main-3.png); + background-position: -935px -940px; + width: 60px; + height: 60px; +} +.slim_shirt_fire { + background-image: url(spritesmith-main-3.png); + background-position: -1001px 0px; + width: 90px; + height: 90px; +} +.customize-option.slim_shirt_fire { + background-image: url(spritesmith-main-3.png); + background-position: -1026px -30px; + width: 60px; + height: 60px; +} +.slim_shirt_green { + background-image: url(spritesmith-main-3.png); + background-position: -1001px -91px; + width: 90px; + height: 90px; +} +.customize-option.slim_shirt_green { + background-image: url(spritesmith-main-3.png); + background-position: -1026px -121px; + width: 60px; + height: 60px; +} +.slim_shirt_horizon { + background-image: url(spritesmith-main-3.png); + background-position: -1001px -182px; + width: 90px; + height: 90px; +} +.customize-option.slim_shirt_horizon { + background-image: url(spritesmith-main-3.png); + background-position: -1026px -212px; + width: 60px; + height: 60px; +} +.slim_shirt_ocean { + background-image: url(spritesmith-main-3.png); + background-position: -1001px -273px; + width: 90px; + height: 90px; +} +.customize-option.slim_shirt_ocean { + background-image: url(spritesmith-main-3.png); + background-position: -1026px -303px; + width: 60px; + height: 60px; +} +.slim_shirt_pink { + background-image: url(spritesmith-main-3.png); + background-position: -1001px -364px; + width: 90px; + height: 90px; +} +.customize-option.slim_shirt_pink { + background-image: url(spritesmith-main-3.png); + background-position: -1026px -394px; + width: 60px; + height: 60px; +} +.slim_shirt_purple { + background-image: url(spritesmith-main-3.png); + background-position: -1001px -455px; + width: 90px; + height: 90px; +} +.customize-option.slim_shirt_purple { + background-image: url(spritesmith-main-3.png); + background-position: -1026px -485px; + width: 60px; + height: 60px; +} +.slim_shirt_rainbow { + background-image: url(spritesmith-main-3.png); + background-position: -1001px -546px; + width: 90px; + height: 90px; +} +.customize-option.slim_shirt_rainbow { + background-image: url(spritesmith-main-3.png); + background-position: -1026px -576px; + width: 60px; + height: 60px; +} +.slim_shirt_redblue { + background-image: url(spritesmith-main-3.png); + background-position: -1001px -637px; + width: 90px; + height: 90px; +} +.customize-option.slim_shirt_redblue { + background-image: url(spritesmith-main-3.png); + background-position: -1026px -667px; + width: 60px; + height: 60px; +} +.slim_shirt_thunder { + background-image: url(spritesmith-main-3.png); + background-position: -1001px -728px; + width: 90px; + height: 90px; +} +.customize-option.slim_shirt_thunder { + background-image: url(spritesmith-main-3.png); + background-position: -1026px -758px; + width: 60px; + height: 60px; +} +.slim_shirt_tropical { + background-image: url(spritesmith-main-3.png); + background-position: -1001px -819px; + width: 90px; + height: 90px; +} +.customize-option.slim_shirt_tropical { + background-image: url(spritesmith-main-3.png); + background-position: -1026px -849px; + width: 60px; + height: 60px; +} +.slim_shirt_white { + background-image: url(spritesmith-main-3.png); + background-position: -1001px -910px; + width: 90px; + height: 90px; +} +.customize-option.slim_shirt_white { + background-image: url(spritesmith-main-3.png); + background-position: -1026px -940px; + width: 60px; + height: 60px; +} +.slim_shirt_yellow { + background-image: url(spritesmith-main-3.png); + background-position: 0px -1001px; + width: 90px; + height: 90px; +} +.customize-option.slim_shirt_yellow { + background-image: url(spritesmith-main-3.png); + background-position: -25px -1031px; + width: 60px; + height: 60px; +} +.slim_shirt_zombie { + background-image: url(spritesmith-main-3.png); + background-position: -91px -1001px; + width: 90px; + height: 90px; +} +.customize-option.slim_shirt_zombie { + background-image: url(spritesmith-main-3.png); + background-position: -116px -1031px; + width: 60px; + height: 60px; +} +.skin_0ff591 { + background-image: url(spritesmith-main-3.png); + background-position: -273px -1001px; + width: 90px; + height: 90px; +} +.customize-option.skin_0ff591 { + background-image: url(spritesmith-main-3.png); + background-position: -298px -1016px; + width: 60px; + height: 60px; +} +.skin_0ff591_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -182px -1001px; + width: 90px; + height: 90px; +} +.customize-option.skin_0ff591_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -207px -1016px; + width: 60px; + height: 60px; +} +.skin_2b43f6 { + background-image: url(spritesmith-main-3.png); + background-position: -455px -1001px; + width: 90px; + height: 90px; +} +.customize-option.skin_2b43f6 { + background-image: url(spritesmith-main-3.png); + background-position: -480px -1016px; + width: 60px; + height: 60px; +} +.skin_2b43f6_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -364px -1001px; + width: 90px; + height: 90px; +} +.customize-option.skin_2b43f6_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -389px -1016px; + width: 60px; + height: 60px; +} +.skin_6bd049 { + background-image: url(spritesmith-main-3.png); + background-position: -637px -1001px; + width: 90px; + height: 90px; +} +.customize-option.skin_6bd049 { + background-image: url(spritesmith-main-3.png); + background-position: -662px -1016px; + width: 60px; + height: 60px; +} +.skin_6bd049_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -546px -1001px; + width: 90px; + height: 90px; +} +.customize-option.skin_6bd049_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -571px -1016px; + width: 60px; + height: 60px; +} +.skin_800ed0 { + background-image: url(spritesmith-main-3.png); + background-position: -819px -1001px; + width: 90px; + height: 90px; +} +.customize-option.skin_800ed0 { + background-image: url(spritesmith-main-3.png); + background-position: -844px -1016px; + width: 60px; + height: 60px; +} +.skin_800ed0_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -728px -1001px; + width: 90px; + height: 90px; +} +.customize-option.skin_800ed0_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -753px -1016px; + width: 60px; + height: 60px; +} +.skin_915533 { + background-image: url(spritesmith-main-3.png); + background-position: -1001px -1001px; + width: 90px; + height: 90px; +} +.customize-option.skin_915533 { + background-image: url(spritesmith-main-3.png); + background-position: -1026px -1016px; + width: 60px; + height: 60px; +} +.skin_915533_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -910px -1001px; + width: 90px; + height: 90px; +} +.customize-option.skin_915533_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -935px -1016px; + width: 60px; + height: 60px; +} +.skin_98461a { + background-image: url(spritesmith-main-3.png); + background-position: -1092px -91px; + width: 90px; + height: 90px; +} +.customize-option.skin_98461a { + background-image: url(spritesmith-main-3.png); + background-position: -1117px -106px; + width: 60px; + height: 60px; +} +.skin_98461a_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1092px 0px; + width: 90px; + height: 90px; +} +.customize-option.skin_98461a_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1117px -15px; + width: 60px; + height: 60px; +} +.skin_bear { + background-image: url(spritesmith-main-3.png); + background-position: -1092px -273px; + width: 90px; + height: 90px; +} +.customize-option.skin_bear { + background-image: url(spritesmith-main-3.png); + background-position: -1117px -288px; + width: 60px; + height: 60px; +} +.skin_bear_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1092px -182px; + width: 90px; + height: 90px; +} +.customize-option.skin_bear_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1117px -197px; + width: 60px; + height: 60px; +} +.skin_c06534 { + background-image: url(spritesmith-main-3.png); + background-position: -1092px -455px; + width: 90px; + height: 90px; +} +.customize-option.skin_c06534 { + background-image: url(spritesmith-main-3.png); + background-position: -1117px -470px; + width: 60px; + height: 60px; +} +.skin_c06534_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1092px -364px; + width: 90px; + height: 90px; +} +.customize-option.skin_c06534_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1117px -379px; + width: 60px; + height: 60px; +} +.skin_c3e1dc { + background-image: url(spritesmith-main-3.png); + background-position: -1092px -637px; + width: 90px; + height: 90px; +} +.customize-option.skin_c3e1dc { + background-image: url(spritesmith-main-3.png); + background-position: -1117px -652px; + width: 60px; + height: 60px; +} +.skin_c3e1dc_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1092px -546px; + width: 90px; + height: 90px; +} +.customize-option.skin_c3e1dc_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1117px -561px; + width: 60px; + height: 60px; +} +.skin_cactus { + background-image: url(spritesmith-main-3.png); + background-position: -1092px -819px; + width: 90px; + height: 90px; +} +.customize-option.skin_cactus { + background-image: url(spritesmith-main-3.png); + background-position: -1117px -834px; + width: 60px; + height: 60px; +} +.skin_cactus_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1092px -728px; + width: 90px; + height: 90px; +} +.customize-option.skin_cactus_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1117px -743px; + width: 60px; + height: 60px; +} +.skin_candycorn { + background-image: url(spritesmith-main-3.png); + background-position: -1092px -1001px; + width: 90px; + height: 90px; +} +.customize-option.skin_candycorn { + background-image: url(spritesmith-main-3.png); + background-position: -1117px -1016px; + width: 60px; + height: 60px; +} +.skin_candycorn_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1092px -910px; + width: 90px; + height: 90px; +} +.customize-option.skin_candycorn_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1117px -925px; + width: 60px; + height: 60px; +} +.skin_clownfish { + background-image: url(spritesmith-main-3.png); + background-position: -91px -1092px; + width: 90px; + height: 90px; +} +.customize-option.skin_clownfish { + background-image: url(spritesmith-main-3.png); + background-position: -116px -1107px; + width: 60px; + height: 60px; +} +.skin_clownfish_sleep { + background-image: url(spritesmith-main-3.png); + background-position: 0px -1092px; + width: 90px; + height: 90px; +} +.customize-option.skin_clownfish_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -25px -1107px; + width: 60px; + height: 60px; +} +.skin_d7a9f7 { + background-image: url(spritesmith-main-3.png); + background-position: -273px -1092px; + width: 90px; + height: 90px; +} +.customize-option.skin_d7a9f7 { + background-image: url(spritesmith-main-3.png); + background-position: -298px -1107px; + width: 60px; + height: 60px; +} +.skin_d7a9f7_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -182px -1092px; + width: 90px; + height: 90px; +} +.customize-option.skin_d7a9f7_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -207px -1107px; + width: 60px; + height: 60px; +} +.skin_ddc994 { + background-image: url(spritesmith-main-3.png); + background-position: -455px -1092px; + width: 90px; + height: 90px; +} +.customize-option.skin_ddc994 { + background-image: url(spritesmith-main-3.png); + background-position: -480px -1107px; + width: 60px; + height: 60px; +} +.skin_ddc994_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -364px -1092px; + width: 90px; + height: 90px; +} +.customize-option.skin_ddc994_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -389px -1107px; + width: 60px; + height: 60px; +} +.skin_deepocean { + background-image: url(spritesmith-main-3.png); + background-position: -637px -1092px; + width: 90px; + height: 90px; +} +.customize-option.skin_deepocean { + background-image: url(spritesmith-main-3.png); + background-position: -662px -1107px; + width: 60px; + height: 60px; +} +.skin_deepocean_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -546px -1092px; + width: 90px; + height: 90px; +} +.customize-option.skin_deepocean_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -571px -1107px; + width: 60px; + height: 60px; +} +.skin_ea8349 { + background-image: url(spritesmith-main-3.png); + background-position: -819px -1092px; + width: 90px; + height: 90px; +} +.customize-option.skin_ea8349 { + background-image: url(spritesmith-main-3.png); + background-position: -844px -1107px; + width: 60px; + height: 60px; +} +.skin_ea8349_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -728px -1092px; + width: 90px; + height: 90px; +} +.customize-option.skin_ea8349_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -753px -1107px; + width: 60px; + height: 60px; +} +.skin_eb052b { + background-image: url(spritesmith-main-3.png); + background-position: -1001px -1092px; + width: 90px; + height: 90px; +} +.customize-option.skin_eb052b { + background-image: url(spritesmith-main-3.png); + background-position: -1026px -1107px; + width: 60px; + height: 60px; +} +.skin_eb052b_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -910px -1092px; + width: 90px; + height: 90px; +} +.customize-option.skin_eb052b_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -935px -1107px; + width: 60px; + height: 60px; +} +.skin_f5a76e { + background-image: url(spritesmith-main-3.png); + background-position: -1183px 0px; + width: 90px; + height: 90px; +} +.customize-option.skin_f5a76e { + background-image: url(spritesmith-main-3.png); + background-position: -1208px -15px; + width: 60px; + height: 60px; +} +.skin_f5a76e_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1092px -1092px; + width: 90px; + height: 90px; +} +.customize-option.skin_f5a76e_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1117px -1107px; + width: 60px; + height: 60px; +} +.skin_f5d70f { + background-image: url(spritesmith-main-3.png); + background-position: -1183px -182px; + width: 90px; + height: 90px; +} +.customize-option.skin_f5d70f { + background-image: url(spritesmith-main-3.png); + background-position: -1208px -197px; + width: 60px; + height: 60px; +} +.skin_f5d70f_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1183px -91px; + width: 90px; + height: 90px; +} +.customize-option.skin_f5d70f_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1208px -106px; + width: 60px; + height: 60px; +} +.skin_f69922 { + background-image: url(spritesmith-main-3.png); + background-position: -1183px -364px; + width: 90px; + height: 90px; +} +.customize-option.skin_f69922 { + background-image: url(spritesmith-main-3.png); + background-position: -1208px -379px; + width: 60px; + height: 60px; +} +.skin_f69922_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1183px -273px; + width: 90px; + height: 90px; +} +.customize-option.skin_f69922_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1208px -288px; + width: 60px; + height: 60px; +} +.skin_fox { + background-image: url(spritesmith-main-3.png); + background-position: -1183px -546px; + width: 90px; + height: 90px; +} +.customize-option.skin_fox { + background-image: url(spritesmith-main-3.png); + background-position: -1208px -561px; + width: 60px; + height: 60px; +} +.skin_fox_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1183px -455px; + width: 90px; + height: 90px; +} +.customize-option.skin_fox_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1208px -470px; + width: 60px; + height: 60px; +} +.skin_ghost { + background-image: url(spritesmith-main-3.png); + background-position: -1183px -728px; + width: 90px; + height: 90px; +} +.customize-option.skin_ghost { + background-image: url(spritesmith-main-3.png); + background-position: -1208px -743px; + width: 60px; + height: 60px; +} +.skin_ghost_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1183px -637px; + width: 90px; + height: 90px; +} +.customize-option.skin_ghost_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1208px -652px; + width: 60px; + height: 60px; +} +.skin_lion { + background-image: url(spritesmith-main-3.png); + background-position: -1183px -910px; + width: 90px; + height: 90px; +} +.customize-option.skin_lion { + background-image: url(spritesmith-main-3.png); + background-position: -1208px -925px; + width: 60px; + height: 60px; +} +.skin_lion_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1183px -819px; + width: 90px; + height: 90px; +} +.customize-option.skin_lion_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1208px -834px; + width: 60px; + height: 60px; +} +.skin_merblue { + background-image: url(spritesmith-main-3.png); + background-position: -1183px -1092px; + width: 90px; + height: 90px; +} +.customize-option.skin_merblue { + background-image: url(spritesmith-main-3.png); + background-position: -1208px -1107px; + width: 60px; + height: 60px; +} +.skin_merblue_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1183px -1001px; + width: 90px; + height: 90px; +} +.customize-option.skin_merblue_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1208px -1016px; + width: 60px; + height: 60px; +} +.skin_mergold { + background-image: url(spritesmith-main-3.png); + background-position: -91px -1183px; + width: 90px; + height: 90px; +} +.customize-option.skin_mergold { + background-image: url(spritesmith-main-3.png); + background-position: -116px -1198px; + width: 60px; + height: 60px; +} +.skin_mergold_sleep { + background-image: url(spritesmith-main-3.png); + background-position: 0px -1183px; + width: 90px; + height: 90px; +} +.customize-option.skin_mergold_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -25px -1198px; + width: 60px; + height: 60px; +} +.skin_mergreen { + background-image: url(spritesmith-main-3.png); + background-position: -273px -1183px; + width: 90px; + height: 90px; +} +.customize-option.skin_mergreen { + background-image: url(spritesmith-main-3.png); + background-position: -298px -1198px; + width: 60px; + height: 60px; +} +.skin_mergreen_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -182px -1183px; + width: 90px; + height: 90px; +} +.customize-option.skin_mergreen_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -207px -1198px; + width: 60px; + height: 60px; +} +.skin_merruby { + background-image: url(spritesmith-main-3.png); + background-position: -455px -1183px; + width: 90px; + height: 90px; +} +.customize-option.skin_merruby { + background-image: url(spritesmith-main-3.png); + background-position: -480px -1198px; + width: 60px; + height: 60px; +} +.skin_merruby_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -364px -1183px; + width: 90px; + height: 90px; +} +.customize-option.skin_merruby_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -389px -1198px; + width: 60px; + height: 60px; +} +.skin_monster { + background-image: url(spritesmith-main-3.png); + background-position: -637px -1183px; + width: 90px; + height: 90px; +} +.customize-option.skin_monster { + background-image: url(spritesmith-main-3.png); + background-position: -662px -1198px; + width: 60px; + height: 60px; +} +.skin_monster_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -546px -1183px; + width: 90px; + height: 90px; +} +.customize-option.skin_monster_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -571px -1198px; + width: 60px; + height: 60px; +} +.skin_ogre { + background-image: url(spritesmith-main-3.png); + background-position: -819px -1183px; + width: 90px; + height: 90px; +} +.customize-option.skin_ogre { + background-image: url(spritesmith-main-3.png); + background-position: -844px -1198px; + width: 60px; + height: 60px; +} +.skin_ogre_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -728px -1183px; + width: 90px; + height: 90px; +} +.customize-option.skin_ogre_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -753px -1198px; + width: 60px; + height: 60px; +} +.skin_panda { background-image: url(spritesmith-main-3.png); background-position: -1001px -1183px; width: 90px; height: 90px; } -.customize-option.skin_pastelPink_sleep { +.customize-option.skin_panda { background-image: url(spritesmith-main-3.png); background-position: -1026px -1198px; width: 60px; height: 60px; } -.skin_pastelPurple { +.skin_panda_sleep { background-image: url(spritesmith-main-3.png); - background-position: -1274px 0px; + background-position: 0px 0px; width: 90px; height: 90px; } -.customize-option.skin_pastelPurple { +.customize-option.skin_panda_sleep { background-image: url(spritesmith-main-3.png); - background-position: -1299px -15px; + background-position: -25px -15px; width: 60px; height: 60px; } -.skin_pastelPurple_sleep { +.skin_pastelBlue { background-image: url(spritesmith-main-3.png); background-position: -1183px -1183px; width: 90px; height: 90px; } -.customize-option.skin_pastelPurple_sleep { +.customize-option.skin_pastelBlue { background-image: url(spritesmith-main-3.png); background-position: -1208px -1198px; width: 60px; height: 60px; } -.skin_pastelRainbowChevron { +.skin_pastelBlue_sleep { background-image: url(spritesmith-main-3.png); - background-position: -1274px -182px; + background-position: -1092px -1183px; width: 90px; height: 90px; } -.customize-option.skin_pastelRainbowChevron { +.customize-option.skin_pastelBlue_sleep { background-image: url(spritesmith-main-3.png); - background-position: -1299px -197px; + background-position: -1117px -1198px; width: 60px; height: 60px; } -.skin_pastelRainbowChevron_sleep { +.skin_pastelGreen { background-image: url(spritesmith-main-3.png); background-position: -1274px -91px; width: 90px; height: 90px; } -.customize-option.skin_pastelRainbowChevron_sleep { +.customize-option.skin_pastelGreen { background-image: url(spritesmith-main-3.png); background-position: -1299px -106px; width: 60px; height: 60px; } -.skin_pastelRainbowDiagonal { +.skin_pastelGreen_sleep { background-image: url(spritesmith-main-3.png); - background-position: -1274px -364px; + background-position: -1274px 0px; width: 90px; height: 90px; } -.customize-option.skin_pastelRainbowDiagonal { +.customize-option.skin_pastelGreen_sleep { background-image: url(spritesmith-main-3.png); - background-position: -1299px -379px; + background-position: -1299px -15px; width: 60px; height: 60px; } -.skin_pastelRainbowDiagonal_sleep { +.skin_pastelOrange { background-image: url(spritesmith-main-3.png); background-position: -1274px -273px; width: 90px; height: 90px; } -.customize-option.skin_pastelRainbowDiagonal_sleep { +.customize-option.skin_pastelOrange { background-image: url(spritesmith-main-3.png); background-position: -1299px -288px; width: 60px; height: 60px; } -.skin_pastelYellow { +.skin_pastelOrange_sleep { background-image: url(spritesmith-main-3.png); - background-position: -1274px -546px; + background-position: -1274px -182px; width: 90px; height: 90px; } -.customize-option.skin_pastelYellow { +.customize-option.skin_pastelOrange_sleep { background-image: url(spritesmith-main-3.png); - background-position: -1299px -561px; + background-position: -1299px -197px; width: 60px; height: 60px; } -.skin_pastelYellow_sleep { +.skin_pastelPink { background-image: url(spritesmith-main-3.png); background-position: -1274px -455px; width: 90px; height: 90px; } -.customize-option.skin_pastelYellow_sleep { +.customize-option.skin_pastelPink { background-image: url(spritesmith-main-3.png); background-position: -1299px -470px; width: 60px; height: 60px; } -.skin_pig { +.skin_pastelPink_sleep { background-image: url(spritesmith-main-3.png); - background-position: -1274px -728px; + background-position: -1274px -364px; width: 90px; height: 90px; } -.customize-option.skin_pig { +.customize-option.skin_pastelPink_sleep { background-image: url(spritesmith-main-3.png); - background-position: -1299px -743px; + background-position: -1299px -379px; width: 60px; height: 60px; } -.skin_pig_sleep { +.skin_pastelPurple { background-image: url(spritesmith-main-3.png); background-position: -1274px -637px; width: 90px; height: 90px; } -.customize-option.skin_pig_sleep { +.customize-option.skin_pastelPurple { background-image: url(spritesmith-main-3.png); background-position: -1299px -652px; width: 60px; height: 60px; } -.skin_pumpkin { +.skin_pastelPurple_sleep { background-image: url(spritesmith-main-3.png); - background-position: -1274px -910px; + background-position: -1274px -546px; width: 90px; height: 90px; } -.customize-option.skin_pumpkin { +.customize-option.skin_pastelPurple_sleep { background-image: url(spritesmith-main-3.png); - background-position: -1299px -925px; + background-position: -1299px -561px; width: 60px; height: 60px; } -.skin_pumpkin2 { - background-image: url(spritesmith-main-3.png); - background-position: -1274px -1092px; - width: 90px; - height: 90px; -} -.customize-option.skin_pumpkin2 { - background-image: url(spritesmith-main-3.png); - background-position: -1299px -1107px; - width: 60px; - height: 60px; -} -.skin_pumpkin2_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1274px -1001px; - width: 90px; - height: 90px; -} -.customize-option.skin_pumpkin2_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1299px -1016px; - width: 60px; - height: 60px; -} -.skin_pumpkin_sleep { +.skin_pastelRainbowChevron { background-image: url(spritesmith-main-3.png); background-position: -1274px -819px; width: 90px; height: 90px; } -.customize-option.skin_pumpkin_sleep { +.customize-option.skin_pastelRainbowChevron { background-image: url(spritesmith-main-3.png); background-position: -1299px -834px; width: 60px; height: 60px; } -.skin_rainbow { +.skin_pastelRainbowChevron_sleep { background-image: url(spritesmith-main-3.png); - background-position: 0px -1274px; + background-position: -1274px -728px; width: 90px; height: 90px; } -.customize-option.skin_rainbow { +.customize-option.skin_pastelRainbowChevron_sleep { background-image: url(spritesmith-main-3.png); - background-position: -25px -1289px; + background-position: -1299px -743px; width: 60px; height: 60px; } -.skin_rainbow_sleep { +.skin_pastelRainbowDiagonal { + background-image: url(spritesmith-main-3.png); + background-position: -1274px -1001px; + width: 90px; + height: 90px; +} +.customize-option.skin_pastelRainbowDiagonal { + background-image: url(spritesmith-main-3.png); + background-position: -1299px -1016px; + width: 60px; + height: 60px; +} +.skin_pastelRainbowDiagonal_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1274px -910px; + width: 90px; + height: 90px; +} +.customize-option.skin_pastelRainbowDiagonal_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1299px -925px; + width: 60px; + height: 60px; +} +.skin_pastelYellow { background-image: url(spritesmith-main-3.png); background-position: -1274px -1183px; width: 90px; height: 90px; } -.customize-option.skin_rainbow_sleep { +.customize-option.skin_pastelYellow { background-image: url(spritesmith-main-3.png); background-position: -1299px -1198px; width: 60px; height: 60px; } -.skin_reptile { +.skin_pastelYellow_sleep { background-image: url(spritesmith-main-3.png); - background-position: -182px -1274px; + background-position: -1274px -1092px; width: 90px; height: 90px; } -.customize-option.skin_reptile { +.customize-option.skin_pastelYellow_sleep { background-image: url(spritesmith-main-3.png); - background-position: -207px -1289px; + background-position: -1299px -1107px; width: 60px; height: 60px; } -.skin_reptile_sleep { +.skin_pig { background-image: url(spritesmith-main-3.png); background-position: -91px -1274px; width: 90px; height: 90px; } -.customize-option.skin_reptile_sleep { +.customize-option.skin_pig { background-image: url(spritesmith-main-3.png); background-position: -116px -1289px; width: 60px; height: 60px; } -.skin_shadow { +.skin_pig_sleep { background-image: url(spritesmith-main-3.png); - background-position: -364px -1274px; + background-position: 0px -1274px; width: 90px; height: 90px; } -.customize-option.skin_shadow { +.customize-option.skin_pig_sleep { background-image: url(spritesmith-main-3.png); - background-position: -389px -1289px; + background-position: -25px -1289px; width: 60px; height: 60px; } -.skin_shadow2 { - background-image: url(spritesmith-main-3.png); - background-position: -546px -1274px; - width: 90px; - height: 90px; -} -.customize-option.skin_shadow2 { - background-image: url(spritesmith-main-3.png); - background-position: -571px -1289px; - width: 60px; - height: 60px; -} -.skin_shadow2_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -455px -1274px; - width: 90px; - height: 90px; -} -.customize-option.skin_shadow2_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -480px -1289px; - width: 60px; - height: 60px; -} -.skin_shadow_sleep { +.skin_pumpkin { background-image: url(spritesmith-main-3.png); background-position: -273px -1274px; width: 90px; height: 90px; } -.customize-option.skin_shadow_sleep { +.customize-option.skin_pumpkin { background-image: url(spritesmith-main-3.png); background-position: -298px -1289px; width: 60px; height: 60px; } -.skin_shark { +.skin_pumpkin2 { background-image: url(spritesmith-main-3.png); - background-position: -728px -1274px; + background-position: -455px -1274px; width: 90px; height: 90px; } -.customize-option.skin_shark { +.customize-option.skin_pumpkin2 { background-image: url(spritesmith-main-3.png); - background-position: -753px -1289px; + background-position: -480px -1289px; width: 60px; height: 60px; } -.skin_shark_sleep { +.skin_pumpkin2_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -364px -1274px; + width: 90px; + height: 90px; +} +.customize-option.skin_pumpkin2_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -389px -1289px; + width: 60px; + height: 60px; +} +.skin_pumpkin_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -182px -1274px; + width: 90px; + height: 90px; +} +.customize-option.skin_pumpkin_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -207px -1289px; + width: 60px; + height: 60px; +} +.skin_rainbow { background-image: url(spritesmith-main-3.png); background-position: -637px -1274px; width: 90px; height: 90px; } -.customize-option.skin_shark_sleep { +.customize-option.skin_rainbow { background-image: url(spritesmith-main-3.png); background-position: -662px -1289px; width: 60px; height: 60px; } -.skin_skeleton { +.skin_rainbow_sleep { background-image: url(spritesmith-main-3.png); - background-position: -910px -1274px; + background-position: -546px -1274px; width: 90px; height: 90px; } -.customize-option.skin_skeleton { +.customize-option.skin_rainbow_sleep { background-image: url(spritesmith-main-3.png); - background-position: -935px -1289px; + background-position: -571px -1289px; width: 60px; height: 60px; } -.skin_skeleton2 { - background-image: url(spritesmith-main-3.png); - background-position: -1092px -1274px; - width: 90px; - height: 90px; -} -.customize-option.skin_skeleton2 { - background-image: url(spritesmith-main-3.png); - background-position: -1117px -1289px; - width: 60px; - height: 60px; -} -.skin_skeleton2_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1001px -1274px; - width: 90px; - height: 90px; -} -.customize-option.skin_skeleton2_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1026px -1289px; - width: 60px; - height: 60px; -} -.skin_skeleton_sleep { +.skin_reptile { background-image: url(spritesmith-main-3.png); background-position: -819px -1274px; width: 90px; height: 90px; } -.customize-option.skin_skeleton_sleep { +.customize-option.skin_reptile { background-image: url(spritesmith-main-3.png); background-position: -844px -1289px; width: 60px; height: 60px; } -.skin_tiger { +.skin_reptile_sleep { background-image: url(spritesmith-main-3.png); - background-position: -1274px -1274px; + background-position: -728px -1274px; width: 90px; height: 90px; } -.customize-option.skin_tiger { +.customize-option.skin_reptile_sleep { background-image: url(spritesmith-main-3.png); - background-position: -1299px -1289px; + background-position: -753px -1289px; width: 60px; height: 60px; } -.skin_tiger_sleep { +.skin_shadow { + background-image: url(spritesmith-main-3.png); + background-position: -1001px -1274px; + width: 90px; + height: 90px; +} +.customize-option.skin_shadow { + background-image: url(spritesmith-main-3.png); + background-position: -1026px -1289px; + width: 60px; + height: 60px; +} +.skin_shadow2 { background-image: url(spritesmith-main-3.png); background-position: -1183px -1274px; width: 90px; height: 90px; } -.customize-option.skin_tiger_sleep { +.customize-option.skin_shadow2 { background-image: url(spritesmith-main-3.png); background-position: -1208px -1289px; width: 60px; height: 60px; } -.skin_transparent { +.skin_shadow2_sleep { background-image: url(spritesmith-main-3.png); - background-position: -1365px -91px; + background-position: -1092px -1274px; width: 90px; height: 90px; } -.customize-option.skin_transparent { +.customize-option.skin_shadow2_sleep { background-image: url(spritesmith-main-3.png); - background-position: -1390px -106px; + background-position: -1117px -1289px; width: 60px; height: 60px; } -.skin_transparent_sleep { +.skin_shadow_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -910px -1274px; + width: 90px; + height: 90px; +} +.customize-option.skin_shadow_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -935px -1289px; + width: 60px; + height: 60px; +} +.skin_shark { background-image: url(spritesmith-main-3.png); background-position: -1365px 0px; width: 90px; height: 90px; } -.customize-option.skin_transparent_sleep { +.customize-option.skin_shark { background-image: url(spritesmith-main-3.png); background-position: -1390px -15px; width: 60px; height: 60px; } -.skin_tropicalwater { +.skin_shark_sleep { background-image: url(spritesmith-main-3.png); - background-position: -1365px -273px; + background-position: -1274px -1274px; width: 90px; height: 90px; } -.customize-option.skin_tropicalwater { +.customize-option.skin_shark_sleep { background-image: url(spritesmith-main-3.png); - background-position: -1390px -288px; + background-position: -1299px -1289px; width: 60px; height: 60px; } -.skin_tropicalwater_sleep { +.skin_skeleton { background-image: url(spritesmith-main-3.png); background-position: -1365px -182px; width: 90px; height: 90px; } -.customize-option.skin_tropicalwater_sleep { +.customize-option.skin_skeleton { background-image: url(spritesmith-main-3.png); background-position: -1390px -197px; width: 60px; height: 60px; } -.skin_wolf { - background-image: url(spritesmith-main-3.png); - background-position: -1365px -455px; - width: 90px; - height: 90px; -} -.customize-option.skin_wolf { - background-image: url(spritesmith-main-3.png); - background-position: -1390px -470px; - width: 60px; - height: 60px; -} -.skin_wolf_sleep { +.skin_skeleton2 { background-image: url(spritesmith-main-3.png); background-position: -1365px -364px; width: 90px; height: 90px; } -.customize-option.skin_wolf_sleep { +.customize-option.skin_skeleton2 { background-image: url(spritesmith-main-3.png); background-position: -1390px -379px; width: 60px; height: 60px; } -.skin_zombie { +.skin_skeleton2_sleep { background-image: url(spritesmith-main-3.png); - background-position: -1365px -637px; + background-position: -1365px -273px; width: 90px; height: 90px; } -.customize-option.skin_zombie { +.customize-option.skin_skeleton2_sleep { background-image: url(spritesmith-main-3.png); - background-position: -1390px -652px; + background-position: -1390px -288px; width: 60px; height: 60px; } -.skin_zombie2 { +.skin_skeleton_sleep { background-image: url(spritesmith-main-3.png); - background-position: -1365px -819px; + background-position: -1365px -91px; width: 90px; height: 90px; } -.customize-option.skin_zombie2 { +.customize-option.skin_skeleton_sleep { background-image: url(spritesmith-main-3.png); - background-position: -1390px -834px; + background-position: -1390px -106px; width: 60px; height: 60px; } -.skin_zombie2_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1365px -728px; - width: 90px; - height: 90px; -} -.customize-option.skin_zombie2_sleep { - background-image: url(spritesmith-main-3.png); - background-position: -1390px -743px; - width: 60px; - height: 60px; -} -.skin_zombie_sleep { +.skin_tiger { background-image: url(spritesmith-main-3.png); background-position: -1365px -546px; width: 90px; height: 90px; } -.customize-option.skin_zombie_sleep { +.customize-option.skin_tiger { background-image: url(spritesmith-main-3.png); background-position: -1390px -561px; width: 60px; height: 60px; } -.broad_armor_armoire_barristerRobes { +.skin_tiger_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1365px -455px; + width: 90px; + height: 90px; +} +.customize-option.skin_tiger_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1390px -470px; + width: 60px; + height: 60px; +} +.skin_transparent { + background-image: url(spritesmith-main-3.png); + background-position: -1365px -728px; + width: 90px; + height: 90px; +} +.customize-option.skin_transparent { + background-image: url(spritesmith-main-3.png); + background-position: -1390px -743px; + width: 60px; + height: 60px; +} +.skin_transparent_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1365px -637px; + width: 90px; + height: 90px; +} +.customize-option.skin_transparent_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1390px -652px; + width: 60px; + height: 60px; +} +.skin_tropicalwater { background-image: url(spritesmith-main-3.png); background-position: -1365px -910px; width: 90px; height: 90px; } -.broad_armor_armoire_basicArcherArmor { +.customize-option.skin_tropicalwater { background-image: url(spritesmith-main-3.png); - background-position: -1365px -1001px; + background-position: -1390px -925px; + width: 60px; + height: 60px; +} +.skin_tropicalwater_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1365px -819px; width: 90px; height: 90px; } -.broad_armor_armoire_cannoneerRags { +.customize-option.skin_tropicalwater_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1390px -834px; + width: 60px; + height: 60px; +} +.skin_wolf { background-image: url(spritesmith-main-3.png); background-position: -1365px -1092px; width: 90px; height: 90px; } -.broad_armor_armoire_crystalCrescentRobes { +.customize-option.skin_wolf { background-image: url(spritesmith-main-3.png); - background-position: -1365px -1183px; + background-position: -1390px -1107px; + width: 60px; + height: 60px; +} +.skin_wolf_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1365px -1001px; width: 90px; height: 90px; } -.broad_armor_armoire_dragonTamerArmor { +.customize-option.skin_wolf_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1390px -1016px; + width: 60px; + height: 60px; +} +.skin_zombie { background-image: url(spritesmith-main-3.png); background-position: -1365px -1274px; width: 90px; height: 90px; } -.broad_armor_armoire_gladiatorArmor { +.customize-option.skin_zombie { background-image: url(spritesmith-main-3.png); - background-position: 0px -1365px; - width: 90px; - height: 90px; + background-position: -1390px -1289px; + width: 60px; + height: 60px; } -.broad_armor_armoire_goldenToga { +.skin_zombie2 { background-image: url(spritesmith-main-3.png); background-position: -91px -1365px; width: 90px; height: 90px; } -.broad_armor_armoire_graduateRobe { +.customize-option.skin_zombie2 { + background-image: url(spritesmith-main-3.png); + background-position: -116px -1380px; + width: 60px; + height: 60px; +} +.skin_zombie2_sleep { + background-image: url(spritesmith-main-3.png); + background-position: 0px -1365px; + width: 90px; + height: 90px; +} +.customize-option.skin_zombie2_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -25px -1380px; + width: 60px; + height: 60px; +} +.skin_zombie_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1365px -1183px; + width: 90px; + height: 90px; +} +.customize-option.skin_zombie_sleep { + background-image: url(spritesmith-main-3.png); + background-position: -1390px -1198px; + width: 60px; + height: 60px; +} +.broad_armor_armoire_barristerRobes { background-image: url(spritesmith-main-3.png); background-position: -182px -1365px; width: 90px; height: 90px; } -.broad_armor_armoire_hornedIronArmor { +.broad_armor_armoire_basicArcherArmor { background-image: url(spritesmith-main-3.png); background-position: -273px -1365px; width: 90px; height: 90px; } -.broad_armor_armoire_jesterCostume { +.broad_armor_armoire_cannoneerRags { background-image: url(spritesmith-main-3.png); background-position: -364px -1365px; width: 90px; height: 90px; } -.broad_armor_armoire_lunarArmor { +.broad_armor_armoire_crystalCrescentRobes { background-image: url(spritesmith-main-3.png); background-position: -455px -1365px; width: 90px; height: 90px; } -.broad_armor_armoire_minerOveralls { +.broad_armor_armoire_dragonTamerArmor { background-image: url(spritesmith-main-3.png); background-position: -546px -1365px; width: 90px; height: 90px; } -.broad_armor_armoire_plagueDoctorOvercoat { +.broad_armor_armoire_falconerArmor { background-image: url(spritesmith-main-3.png); background-position: -637px -1365px; width: 90px; height: 90px; } -.broad_armor_armoire_rancherRobes { +.broad_armor_armoire_gladiatorArmor { background-image: url(spritesmith-main-3.png); background-position: -728px -1365px; width: 90px; height: 90px; } -.broad_armor_armoire_royalRobes { +.broad_armor_armoire_goldenToga { background-image: url(spritesmith-main-3.png); background-position: -819px -1365px; width: 90px; height: 90px; } -.broad_armor_armoire_shepherdRobes { +.broad_armor_armoire_graduateRobe { background-image: url(spritesmith-main-3.png); background-position: -910px -1365px; width: 90px; height: 90px; } -.broad_armor_armoire_stripedSwimsuit { +.broad_armor_armoire_hornedIronArmor { background-image: url(spritesmith-main-3.png); background-position: -1001px -1365px; width: 90px; height: 90px; } -.eyewear_armoire_plagueDoctorMask { +.broad_armor_armoire_jesterCostume { background-image: url(spritesmith-main-3.png); background-position: -1092px -1365px; width: 90px; height: 90px; } -.headAccessory_armoire_comicalArrow { - background-image: url(spritesmith-main-3.png); - background-position: -546px -1456px; - width: 90px; - height: 90px; -} -.head_armoire_barristerWig { +.broad_armor_armoire_lunarArmor { background-image: url(spritesmith-main-3.png); background-position: -1183px -1365px; width: 90px; height: 90px; } -.head_armoire_basicArcherCap { +.broad_armor_armoire_minerOveralls { background-image: url(spritesmith-main-3.png); background-position: -1274px -1365px; width: 90px; height: 90px; } -.head_armoire_blackCat { +.broad_armor_armoire_plagueDoctorOvercoat { background-image: url(spritesmith-main-3.png); background-position: -1365px -1365px; width: 90px; height: 90px; } -.head_armoire_blueFloppyHat { +.broad_armor_armoire_rancherRobes { background-image: url(spritesmith-main-3.png); background-position: -1456px 0px; width: 90px; height: 90px; } -.head_armoire_blueHairbow { +.broad_armor_armoire_royalRobes { background-image: url(spritesmith-main-3.png); background-position: -1456px -91px; width: 90px; height: 90px; } -.head_armoire_cannoneerBandanna { +.broad_armor_armoire_shepherdRobes { background-image: url(spritesmith-main-3.png); background-position: -1456px -182px; width: 90px; height: 90px; } -.head_armoire_crystalCrescentHat { +.broad_armor_armoire_stripedSwimsuit { background-image: url(spritesmith-main-3.png); background-position: -1456px -273px; width: 90px; height: 90px; } -.head_armoire_dragonTamerHelm { +.eyewear_armoire_plagueDoctorMask { background-image: url(spritesmith-main-3.png); background-position: -1456px -364px; width: 90px; height: 90px; } -.head_armoire_gladiatorHelm { - background-image: url(spritesmith-main-3.png); - background-position: -1456px -455px; - width: 90px; - height: 90px; -} -.head_armoire_goldenLaurels { - background-image: url(spritesmith-main-3.png); - background-position: -1456px -546px; - width: 90px; - height: 90px; -} -.head_armoire_graduateCap { - background-image: url(spritesmith-main-3.png); - background-position: -1456px -637px; - width: 90px; - height: 90px; -} -.head_armoire_greenFloppyHat { - background-image: url(spritesmith-main-3.png); - background-position: -1456px -728px; - width: 90px; - height: 90px; -} -.head_armoire_hornedIronHelm { - background-image: url(spritesmith-main-3.png); - background-position: -1456px -819px; - width: 90px; - height: 90px; -} -.head_armoire_jesterCap { - background-image: url(spritesmith-main-3.png); - background-position: -1456px -910px; - width: 90px; - height: 90px; -} -.head_armoire_lunarCrown { - background-image: url(spritesmith-main-3.png); - background-position: -1456px -1001px; - width: 90px; - height: 90px; -} -.head_armoire_minerHelmet { - background-image: url(spritesmith-main-3.png); - background-position: -1456px -1092px; - width: 90px; - height: 90px; -} -.head_armoire_orangeCat { - background-image: url(spritesmith-main-3.png); - background-position: -1456px -1183px; - width: 90px; - height: 90px; -} -.head_armoire_plagueDoctorHat { - background-image: url(spritesmith-main-3.png); - background-position: -1456px -1274px; - width: 90px; - height: 90px; -} -.head_armoire_rancherHat { - background-image: url(spritesmith-main-3.png); - background-position: -1456px -1365px; - width: 90px; - height: 90px; -} -.head_armoire_redFloppyHat { - background-image: url(spritesmith-main-3.png); - background-position: 0px -1456px; - width: 90px; - height: 90px; -} -.head_armoire_redHairbow { - background-image: url(spritesmith-main-3.png); - background-position: -91px -1456px; - width: 90px; - height: 90px; -} -.head_armoire_royalCrown { - background-image: url(spritesmith-main-3.png); - background-position: -182px -1456px; - width: 90px; - height: 90px; -} -.head_armoire_shepherdHeaddress { - background-image: url(spritesmith-main-3.png); - background-position: -273px -1456px; - width: 90px; - height: 90px; -} -.head_armoire_violetFloppyHat { - background-image: url(spritesmith-main-3.png); - background-position: -364px -1456px; - width: 90px; - height: 90px; -} -.head_armoire_yellowHairbow { - background-image: url(spritesmith-main-3.png); - background-position: -455px -1456px; - width: 90px; - height: 90px; -} -.shield_armoire_dragonTamerShield { - background-image: url(spritesmith-main-3.png); - background-position: -637px -1456px; - width: 90px; - height: 90px; -} -.shield_armoire_floralBouquet { - background-image: url(spritesmith-main-3.png); - background-position: -728px -1456px; - width: 90px; - height: 90px; -} -.shield_armoire_gladiatorShield { - background-image: url(spritesmith-main-3.png); - background-position: -819px -1456px; - width: 90px; - height: 90px; -} -.shield_armoire_midnightShield { - background-image: url(spritesmith-main-3.png); - background-position: -910px -1456px; - width: 90px; - height: 90px; -} -.shield_armoire_mysticLamp { - background-image: url(spritesmith-main-3.png); - background-position: -1001px -1456px; - width: 90px; - height: 90px; -} -.shield_armoire_royalCane { - background-image: url(spritesmith-main-3.png); - background-position: -1092px -1456px; - width: 90px; - height: 90px; -} -.shield_armoire_sandyBucket { - background-image: url(spritesmith-main-3.png); - background-position: -1183px -1456px; - width: 90px; - height: 90px; -} -.shop_armor_armoire_barristerRobes { - background-image: url(spritesmith-main-3.png); - background-position: -1638px -779px; - width: 40px; - height: 40px; -} -.shop_armor_armoire_basicArcherArmor { - background-image: url(spritesmith-main-3.png); - background-position: -1638px -738px; - width: 40px; - height: 40px; -} -.shop_armor_armoire_cannoneerRags { - background-image: url(spritesmith-main-3.png); - background-position: -1638px -697px; - width: 40px; - height: 40px; -} -.shop_armor_armoire_crystalCrescentRobes { - background-image: url(spritesmith-main-3.png); - background-position: -1638px -656px; - width: 40px; - height: 40px; -} -.shop_armor_armoire_dragonTamerArmor { - background-image: url(spritesmith-main-3.png); - background-position: -1638px -615px; - width: 40px; - height: 40px; -} -.shop_armor_armoire_gladiatorArmor { - background-image: url(spritesmith-main-3.png); - background-position: -1638px -574px; - width: 40px; - height: 40px; -} -.shop_armor_armoire_goldenToga { - background-image: url(spritesmith-main-3.png); - background-position: -1638px -533px; - width: 40px; - height: 40px; -} -.shop_armor_armoire_graduateRobe { - background-image: url(spritesmith-main-3.png); - background-position: -1638px -492px; - width: 40px; - height: 40px; -} -.shop_armor_armoire_hornedIronArmor { - background-image: url(spritesmith-main-3.png); - background-position: -1638px -451px; - width: 40px; - height: 40px; -} -.shop_armor_armoire_jesterCostume { - background-image: url(spritesmith-main-3.png); - background-position: -1638px -410px; - width: 40px; - height: 40px; -} -.shop_armor_armoire_lunarArmor { - background-image: url(spritesmith-main-3.png); - background-position: -1638px -369px; - width: 40px; - height: 40px; -} -.shop_armor_armoire_minerOveralls { - background-image: url(spritesmith-main-3.png); - background-position: -1638px -328px; - width: 40px; - height: 40px; -} -.shop_armor_armoire_plagueDoctorOvercoat { - background-image: url(spritesmith-main-3.png); - background-position: -1638px -287px; - width: 40px; - height: 40px; -} -.shop_armor_armoire_rancherRobes { - background-image: url(spritesmith-main-3.png); - background-position: -1638px -246px; - width: 40px; - height: 40px; -} -.shop_armor_armoire_royalRobes { - background-image: url(spritesmith-main-3.png); - background-position: -1638px -205px; - width: 40px; - height: 40px; -} -.shop_armor_armoire_shepherdRobes { - background-image: url(spritesmith-main-3.png); - background-position: -1638px -164px; - width: 40px; - height: 40px; -} -.shop_armor_armoire_stripedSwimsuit { - background-image: url(spritesmith-main-3.png); - background-position: -1638px -123px; - width: 40px; - height: 40px; -} -.shop_eyewear_armoire_plagueDoctorMask { - background-image: url(spritesmith-main-3.png); - background-position: -1638px -82px; - width: 40px; - height: 40px; -} -.shop_headAccessory_armoire_comicalArrow { - background-image: url(spritesmith-main-3.png); - background-position: -1293px -1547px; - width: 40px; - height: 40px; -} -.shop_head_armoire_barristerWig { - background-image: url(spritesmith-main-3.png); - background-position: -1638px -41px; - width: 40px; - height: 40px; -} -.shop_head_armoire_basicArcherCap { - background-image: url(spritesmith-main-3.png); - background-position: -1638px 0px; - width: 40px; - height: 40px; -} -.shop_head_armoire_blackCat { - background-image: url(spritesmith-main-3.png); - background-position: -1580px -1588px; - width: 40px; - height: 40px; -} -.shop_head_armoire_blueFloppyHat { - background-image: url(spritesmith-main-3.png); - background-position: -1539px -1588px; - width: 40px; - height: 40px; -} -.shop_head_armoire_blueHairbow { - background-image: url(spritesmith-main-3.png); - background-position: -1498px -1588px; - width: 40px; - height: 40px; -} -.shop_head_armoire_cannoneerBandanna { - background-image: url(spritesmith-main-3.png); - background-position: -1457px -1588px; - width: 40px; - height: 40px; -} -.shop_head_armoire_crystalCrescentHat { - background-image: url(spritesmith-main-3.png); - background-position: -1416px -1588px; - width: 40px; - height: 40px; -} -.shop_head_armoire_dragonTamerHelm { - background-image: url(spritesmith-main-3.png); - background-position: -1375px -1588px; - width: 40px; - height: 40px; -} -.shop_head_armoire_gladiatorHelm { - background-image: url(spritesmith-main-3.png); - background-position: -637px -1547px; - width: 40px; - height: 40px; -} -.shop_head_armoire_goldenLaurels { - background-image: url(spritesmith-main-3.png); - background-position: -1047px -1588px; - width: 40px; - height: 40px; -} -.shop_head_armoire_graduateCap { - background-image: url(spritesmith-main-3.png); - background-position: -678px -1547px; - width: 40px; - height: 40px; -} -.shop_head_armoire_greenFloppyHat { - background-image: url(spritesmith-main-3.png); - background-position: -719px -1547px; - width: 40px; - height: 40px; -} -.shop_head_armoire_hornedIronHelm { - background-image: url(spritesmith-main-3.png); - background-position: -760px -1547px; - width: 40px; - height: 40px; -} -.shop_head_armoire_jesterCap { - background-image: url(spritesmith-main-3.png); - background-position: -801px -1547px; - width: 40px; - height: 40px; -} -.shop_head_armoire_lunarCrown { - background-image: url(spritesmith-main-3.png); - background-position: -842px -1547px; - width: 40px; - height: 40px; -} -.shop_head_armoire_minerHelmet { - background-image: url(spritesmith-main-3.png); - background-position: -883px -1547px; - width: 40px; - height: 40px; -} -.shop_head_armoire_orangeCat { - background-image: url(spritesmith-main-3.png); - background-position: -924px -1547px; - width: 40px; - height: 40px; -} -.shop_head_armoire_plagueDoctorHat { - background-image: url(spritesmith-main-3.png); - background-position: -965px -1547px; - width: 40px; - height: 40px; -} -.shop_head_armoire_rancherHat { - background-image: url(spritesmith-main-3.png); - background-position: -1006px -1547px; - width: 40px; - height: 40px; -} -.shop_head_armoire_redFloppyHat { - background-image: url(spritesmith-main-3.png); - background-position: -1047px -1547px; - width: 40px; - height: 40px; -} -.shop_head_armoire_redHairbow { - background-image: url(spritesmith-main-3.png); - background-position: -1088px -1547px; - width: 40px; - height: 40px; -} -.shop_head_armoire_royalCrown { - background-image: url(spritesmith-main-3.png); - background-position: -1129px -1547px; - width: 40px; - height: 40px; -} -.shop_head_armoire_shepherdHeaddress { - background-image: url(spritesmith-main-3.png); - background-position: -1170px -1547px; - width: 40px; - height: 40px; -} -.shop_head_armoire_violetFloppyHat { - background-image: url(spritesmith-main-3.png); - background-position: -1211px -1547px; - width: 40px; - height: 40px; -} -.shop_head_armoire_yellowHairbow { - background-image: url(spritesmith-main-3.png); - background-position: -1252px -1547px; - width: 40px; - height: 40px; -} -.shop_shield_armoire_dragonTamerShield { - background-image: url(spritesmith-main-3.png); - background-position: -1334px -1547px; - width: 40px; - height: 40px; -} -.shop_shield_armoire_floralBouquet { - background-image: url(spritesmith-main-3.png); - background-position: -1375px -1547px; - width: 40px; - height: 40px; -} -.shop_shield_armoire_gladiatorShield { - background-image: url(spritesmith-main-3.png); - background-position: -1416px -1547px; - width: 40px; - height: 40px; -} -.shop_shield_armoire_midnightShield { - background-image: url(spritesmith-main-3.png); - background-position: -1457px -1547px; - width: 40px; - height: 40px; -} -.shop_shield_armoire_mysticLamp { - background-image: url(spritesmith-main-3.png); - background-position: -1498px -1547px; - width: 40px; - height: 40px; -} -.shop_shield_armoire_royalCane { - background-image: url(spritesmith-main-3.png); - background-position: -1539px -1547px; - width: 40px; - height: 40px; -} -.shop_shield_armoire_sandyBucket { - background-image: url(spritesmith-main-3.png); - background-position: -1580px -1547px; - width: 40px; - height: 40px; -} -.shop_weapon_armoire_barristerGavel { - background-image: url(spritesmith-main-3.png); - background-position: -637px -1588px; - width: 40px; - height: 40px; -} -.shop_weapon_armoire_basicCrossbow { - background-image: url(spritesmith-main-3.png); - background-position: -678px -1588px; - width: 40px; - height: 40px; -} -.shop_weapon_armoire_basicLongbow { - background-image: url(spritesmith-main-3.png); - background-position: -719px -1588px; - width: 40px; - height: 40px; -} -.shop_weapon_armoire_batWand { - background-image: url(spritesmith-main-3.png); - background-position: -760px -1588px; - width: 40px; - height: 40px; -} -.shop_weapon_armoire_blueLongbow { - background-image: url(spritesmith-main-3.png); - background-position: -801px -1588px; - width: 40px; - height: 40px; -} -.shop_weapon_armoire_cannon { - background-image: url(spritesmith-main-3.png); - background-position: -842px -1588px; - width: 40px; - height: 40px; -} -.shop_weapon_armoire_crystalCrescentStaff { - background-image: url(spritesmith-main-3.png); - background-position: -883px -1588px; - width: 40px; - height: 40px; -} -.shop_weapon_armoire_glowingSpear { - background-image: url(spritesmith-main-3.png); - background-position: -924px -1588px; - width: 40px; - height: 40px; -} -.shop_weapon_armoire_goldWingStaff { - background-image: url(spritesmith-main-3.png); - background-position: -965px -1588px; - width: 40px; - height: 40px; -} -.shop_weapon_armoire_habiticanDiploma { - background-image: url(spritesmith-main-3.png); - background-position: -1006px -1588px; - width: 40px; - height: 40px; -} -.shop_weapon_armoire_ironCrook { - background-image: url(spritesmith-main-3.png); - background-position: -1638px -820px; - width: 40px; - height: 40px; -} -.shop_weapon_armoire_jesterBaton { - background-image: url(spritesmith-main-3.png); - background-position: -1088px -1588px; - width: 40px; - height: 40px; -} -.shop_weapon_armoire_lunarSceptre { - background-image: url(spritesmith-main-3.png); - background-position: -1129px -1588px; - width: 40px; - height: 40px; -} -.shop_weapon_armoire_miningPickax { - background-image: url(spritesmith-main-3.png); - background-position: -1170px -1588px; - width: 40px; - height: 40px; -} -.shop_weapon_armoire_mythmakerSword { - background-image: url(spritesmith-main-3.png); - background-position: -1211px -1588px; - width: 40px; - height: 40px; -} -.shop_weapon_armoire_rancherLasso { - background-image: url(spritesmith-main-3.png); - background-position: -1252px -1588px; - width: 40px; - height: 40px; -} -.shop_weapon_armoire_sandySpade { - background-image: url(spritesmith-main-3.png); - background-position: -1293px -1588px; - width: 40px; - height: 40px; -} -.shop_weapon_armoire_shepherdsCrook { - background-image: url(spritesmith-main-3.png); - background-position: -1334px -1588px; - width: 40px; - height: 40px; -} -.slim_armor_armoire_barristerRobes { - background-image: url(spritesmith-main-3.png); - background-position: -455px -1547px; - width: 90px; - height: 90px; -} -.slim_armor_armoire_basicArcherArmor { - background-image: url(spritesmith-main-3.png); - background-position: -364px -1547px; - width: 90px; - height: 90px; -} -.slim_armor_armoire_cannoneerRags { - background-image: url(spritesmith-main-3.png); - background-position: -273px -1547px; - width: 90px; - height: 90px; -} -.slim_armor_armoire_crystalCrescentRobes { - background-image: url(spritesmith-main-3.png); - background-position: -182px -1547px; - width: 90px; - height: 90px; -} -.slim_armor_armoire_dragonTamerArmor { - background-image: url(spritesmith-main-3.png); - background-position: -91px -1547px; - width: 90px; - height: 90px; -} -.slim_armor_armoire_gladiatorArmor { - background-image: url(spritesmith-main-3.png); - background-position: 0px -1547px; - width: 90px; - height: 90px; -} -.slim_armor_armoire_goldenToga { - background-image: url(spritesmith-main-3.png); - background-position: -1547px -1456px; - width: 90px; - height: 90px; -} -.slim_armor_armoire_graduateRobe { - background-image: url(spritesmith-main-3.png); - background-position: -1547px -1365px; - width: 90px; - height: 90px; -} -.slim_armor_armoire_hornedIronArmor { - background-image: url(spritesmith-main-3.png); - background-position: -1547px -1274px; - width: 90px; - height: 90px; -} -.slim_armor_armoire_jesterCostume { - background-image: url(spritesmith-main-3.png); - background-position: -1547px -1183px; - width: 90px; - height: 90px; -} -.slim_armor_armoire_lunarArmor { - background-image: url(spritesmith-main-3.png); - background-position: -1547px -1092px; - width: 90px; - height: 90px; -} -.slim_armor_armoire_minerOveralls { - background-image: url(spritesmith-main-3.png); - background-position: -1547px -1001px; - width: 90px; - height: 90px; -} -.slim_armor_armoire_plagueDoctorOvercoat { - background-image: url(spritesmith-main-3.png); - background-position: -1547px -910px; - width: 90px; - height: 90px; -} -.slim_armor_armoire_rancherRobes { - background-image: url(spritesmith-main-3.png); - background-position: -1547px -819px; - width: 90px; - height: 90px; -} -.slim_armor_armoire_royalRobes { - background-image: url(spritesmith-main-3.png); - background-position: -1547px -728px; - width: 90px; - height: 90px; -} -.slim_armor_armoire_shepherdRobes { - background-image: url(spritesmith-main-3.png); - background-position: -1547px -637px; - width: 90px; - height: 90px; -} -.slim_armor_armoire_stripedSwimsuit { - background-image: url(spritesmith-main-3.png); - background-position: -1547px -546px; - width: 90px; - height: 90px; -} -.weapon_armoire_barristerGavel { - background-image: url(spritesmith-main-3.png); - background-position: -1547px -455px; - width: 90px; - height: 90px; -} -.weapon_armoire_basicCrossbow { - background-image: url(spritesmith-main-3.png); - background-position: -1547px -364px; - width: 90px; - height: 90px; -} -.weapon_armoire_basicLongbow { - background-image: url(spritesmith-main-3.png); - background-position: -1547px -273px; - width: 90px; - height: 90px; -} -.weapon_armoire_batWand { - background-image: url(spritesmith-main-3.png); - background-position: -1547px -182px; - width: 90px; - height: 90px; -} -.weapon_armoire_blueLongbow { - background-image: url(spritesmith-main-3.png); - background-position: -1547px -91px; - width: 90px; - height: 90px; -} -.weapon_armoire_cannon { - background-image: url(spritesmith-main-3.png); - background-position: -1547px 0px; - width: 90px; - height: 90px; -} -.weapon_armoire_crystalCrescentStaff { - background-image: url(spritesmith-main-3.png); - background-position: -1456px -1456px; - width: 90px; - height: 90px; -} -.weapon_armoire_glowingSpear { +.headAccessory_armoire_comicalArrow { background-image: url(spritesmith-main-3.png); background-position: -1365px -1456px; width: 90px; height: 90px; } -.weapon_armoire_goldWingStaff { +.head_armoire_barristerWig { + background-image: url(spritesmith-main-3.png); + background-position: -1456px -455px; + width: 90px; + height: 90px; +} +.head_armoire_basicArcherCap { + background-image: url(spritesmith-main-3.png); + background-position: -1456px -546px; + width: 90px; + height: 90px; +} +.head_armoire_blackCat { + background-image: url(spritesmith-main-3.png); + background-position: -1456px -637px; + width: 90px; + height: 90px; +} +.head_armoire_blueFloppyHat { + background-image: url(spritesmith-main-3.png); + background-position: -1456px -728px; + width: 90px; + height: 90px; +} +.head_armoire_blueHairbow { + background-image: url(spritesmith-main-3.png); + background-position: -1456px -819px; + width: 90px; + height: 90px; +} +.head_armoire_cannoneerBandanna { + background-image: url(spritesmith-main-3.png); + background-position: -1456px -910px; + width: 90px; + height: 90px; +} +.head_armoire_crystalCrescentHat { + background-image: url(spritesmith-main-3.png); + background-position: -1456px -1001px; + width: 90px; + height: 90px; +} +.head_armoire_dragonTamerHelm { + background-image: url(spritesmith-main-3.png); + background-position: -1456px -1092px; + width: 90px; + height: 90px; +} +.head_armoire_falconerCap { + background-image: url(spritesmith-main-3.png); + background-position: -1456px -1183px; + width: 90px; + height: 90px; +} +.head_armoire_gladiatorHelm { + background-image: url(spritesmith-main-3.png); + background-position: -1456px -1274px; + width: 90px; + height: 90px; +} +.head_armoire_goldenLaurels { + background-image: url(spritesmith-main-3.png); + background-position: -1456px -1365px; + width: 90px; + height: 90px; +} +.head_armoire_graduateCap { + background-image: url(spritesmith-main-3.png); + background-position: 0px -1456px; + width: 90px; + height: 90px; +} +.head_armoire_greenFloppyHat { + background-image: url(spritesmith-main-3.png); + background-position: -91px -1456px; + width: 90px; + height: 90px; +} +.head_armoire_hornedIronHelm { + background-image: url(spritesmith-main-3.png); + background-position: -182px -1456px; + width: 90px; + height: 90px; +} +.head_armoire_jesterCap { + background-image: url(spritesmith-main-3.png); + background-position: -273px -1456px; + width: 90px; + height: 90px; +} +.head_armoire_lunarCrown { + background-image: url(spritesmith-main-3.png); + background-position: -364px -1456px; + width: 90px; + height: 90px; +} +.head_armoire_minerHelmet { + background-image: url(spritesmith-main-3.png); + background-position: -455px -1456px; + width: 90px; + height: 90px; +} +.head_armoire_orangeCat { + background-image: url(spritesmith-main-3.png); + background-position: -546px -1456px; + width: 90px; + height: 90px; +} +.head_armoire_plagueDoctorHat { + background-image: url(spritesmith-main-3.png); + background-position: -637px -1456px; + width: 90px; + height: 90px; +} +.head_armoire_rancherHat { + background-image: url(spritesmith-main-3.png); + background-position: -728px -1456px; + width: 90px; + height: 90px; +} +.head_armoire_redFloppyHat { + background-image: url(spritesmith-main-3.png); + background-position: -819px -1456px; + width: 90px; + height: 90px; +} +.head_armoire_redHairbow { + background-image: url(spritesmith-main-3.png); + background-position: -910px -1456px; + width: 90px; + height: 90px; +} +.head_armoire_royalCrown { + background-image: url(spritesmith-main-3.png); + background-position: -1001px -1456px; + width: 90px; + height: 90px; +} +.head_armoire_shepherdHeaddress { + background-image: url(spritesmith-main-3.png); + background-position: -1092px -1456px; + width: 90px; + height: 90px; +} +.head_armoire_violetFloppyHat { + background-image: url(spritesmith-main-3.png); + background-position: -1183px -1456px; + width: 90px; + height: 90px; +} +.head_armoire_yellowHairbow { background-image: url(spritesmith-main-3.png); background-position: -1274px -1456px; width: 90px; height: 90px; } -.weapon_armoire_habiticanDiploma { +.shield_armoire_dragonTamerShield { background-image: url(spritesmith-main-3.png); - background-position: -546px -1547px; + background-position: -1456px -1456px; + width: 90px; + height: 90px; +} +.shield_armoire_floralBouquet { + background-image: url(spritesmith-main-3.png); + background-position: -1547px 0px; + width: 90px; + height: 90px; +} +.shield_armoire_gladiatorShield { + background-image: url(spritesmith-main-3.png); + background-position: -1547px -91px; + width: 90px; + height: 90px; +} +.shield_armoire_midnightShield { + background-image: url(spritesmith-main-3.png); + background-position: -1547px -182px; + width: 90px; + height: 90px; +} +.shield_armoire_mysticLamp { + background-image: url(spritesmith-main-3.png); + background-position: -1547px -273px; + width: 90px; + height: 90px; +} +.shield_armoire_perchingFalcon { + background-image: url(spritesmith-main-3.png); + background-position: -1547px -364px; + width: 90px; + height: 90px; +} +.shield_armoire_royalCane { + background-image: url(spritesmith-main-3.png); + background-position: -1547px -455px; + width: 90px; + height: 90px; +} +.shield_armoire_sandyBucket { + background-image: url(spritesmith-main-3.png); + background-position: -1547px -546px; + width: 90px; + height: 90px; +} +.shop_armor_armoire_barristerRobes { + background-image: url(spritesmith-main-3.png); + background-position: -1638px -738px; + width: 40px; + height: 40px; +} +.shop_armor_armoire_basicArcherArmor { + background-image: url(spritesmith-main-3.png); + background-position: -1638px -697px; + width: 40px; + height: 40px; +} +.shop_armor_armoire_cannoneerRags { + background-image: url(spritesmith-main-3.png); + background-position: -1638px -656px; + width: 40px; + height: 40px; +} +.shop_armor_armoire_crystalCrescentRobes { + background-image: url(spritesmith-main-3.png); + background-position: -1638px -615px; + width: 40px; + height: 40px; +} +.shop_armor_armoire_dragonTamerArmor { + background-image: url(spritesmith-main-3.png); + background-position: -1638px -574px; + width: 40px; + height: 40px; +} +.shop_armor_armoire_falconerArmor { + background-image: url(spritesmith-main-3.png); + background-position: -1638px -533px; + width: 40px; + height: 40px; +} +.shop_armor_armoire_gladiatorArmor { + background-image: url(spritesmith-main-3.png); + background-position: -1638px -492px; + width: 40px; + height: 40px; +} +.shop_armor_armoire_goldenToga { + background-image: url(spritesmith-main-3.png); + background-position: -1638px -451px; + width: 40px; + height: 40px; +} +.shop_armor_armoire_graduateRobe { + background-image: url(spritesmith-main-3.png); + background-position: -1638px -410px; + width: 40px; + height: 40px; +} +.shop_armor_armoire_hornedIronArmor { + background-image: url(spritesmith-main-3.png); + background-position: -1638px -369px; + width: 40px; + height: 40px; +} +.shop_armor_armoire_jesterCostume { + background-image: url(spritesmith-main-3.png); + background-position: -1638px -328px; + width: 40px; + height: 40px; +} +.shop_armor_armoire_lunarArmor { + background-image: url(spritesmith-main-3.png); + background-position: -1638px -287px; + width: 40px; + height: 40px; +} +.shop_armor_armoire_minerOveralls { + background-image: url(spritesmith-main-3.png); + background-position: -1638px -246px; + width: 40px; + height: 40px; +} +.shop_armor_armoire_plagueDoctorOvercoat { + background-image: url(spritesmith-main-3.png); + background-position: -1638px -205px; + width: 40px; + height: 40px; +} +.shop_armor_armoire_rancherRobes { + background-image: url(spritesmith-main-3.png); + background-position: -1638px -164px; + width: 40px; + height: 40px; +} +.shop_armor_armoire_royalRobes { + background-image: url(spritesmith-main-3.png); + background-position: -546px -1547px; + width: 40px; + height: 40px; +} +.shop_armor_armoire_shepherdRobes { + background-image: url(spritesmith-main-3.png); + background-position: -915px -1588px; + width: 40px; + height: 40px; +} +.shop_armor_armoire_stripedSwimsuit { + background-image: url(spritesmith-main-3.png); + background-position: -587px -1547px; + width: 40px; + height: 40px; +} +.shop_eyewear_armoire_plagueDoctorMask { + background-image: url(spritesmith-main-3.png); + background-position: -628px -1547px; + width: 40px; + height: 40px; +} +.shop_headAccessory_armoire_comicalArrow { + background-image: url(spritesmith-main-3.png); + background-position: -669px -1588px; + width: 40px; + height: 40px; +} +.shop_head_armoire_barristerWig { + background-image: url(spritesmith-main-3.png); + background-position: -669px -1547px; + width: 40px; + height: 40px; +} +.shop_head_armoire_basicArcherCap { + background-image: url(spritesmith-main-3.png); + background-position: -710px -1547px; + width: 40px; + height: 40px; +} +.shop_head_armoire_blackCat { + background-image: url(spritesmith-main-3.png); + background-position: -751px -1547px; + width: 40px; + height: 40px; +} +.shop_head_armoire_blueFloppyHat { + background-image: url(spritesmith-main-3.png); + background-position: -792px -1547px; + width: 40px; + height: 40px; +} +.shop_head_armoire_blueHairbow { + background-image: url(spritesmith-main-3.png); + background-position: -833px -1547px; + width: 40px; + height: 40px; +} +.shop_head_armoire_cannoneerBandanna { + background-image: url(spritesmith-main-3.png); + background-position: -874px -1547px; + width: 40px; + height: 40px; +} +.shop_head_armoire_crystalCrescentHat { + background-image: url(spritesmith-main-3.png); + background-position: -915px -1547px; + width: 40px; + height: 40px; +} +.shop_head_armoire_dragonTamerHelm { + background-image: url(spritesmith-main-3.png); + background-position: -956px -1547px; + width: 40px; + height: 40px; +} +.shop_head_armoire_falconerCap { + background-image: url(spritesmith-main-3.png); + background-position: -997px -1547px; + width: 40px; + height: 40px; +} +.shop_head_armoire_gladiatorHelm { + background-image: url(spritesmith-main-3.png); + background-position: -1038px -1547px; + width: 40px; + height: 40px; +} +.shop_head_armoire_goldenLaurels { + background-image: url(spritesmith-main-3.png); + background-position: -1079px -1547px; + width: 40px; + height: 40px; +} +.shop_head_armoire_graduateCap { + background-image: url(spritesmith-main-3.png); + background-position: -1120px -1547px; + width: 40px; + height: 40px; +} +.shop_head_armoire_greenFloppyHat { + background-image: url(spritesmith-main-3.png); + background-position: -1161px -1547px; + width: 40px; + height: 40px; +} +.shop_head_armoire_hornedIronHelm { + background-image: url(spritesmith-main-3.png); + background-position: -1202px -1547px; + width: 40px; + height: 40px; +} +.shop_head_armoire_jesterCap { + background-image: url(spritesmith-main-3.png); + background-position: -1243px -1547px; + width: 40px; + height: 40px; +} +.shop_head_armoire_lunarCrown { + background-image: url(spritesmith-main-3.png); + background-position: -1284px -1547px; + width: 40px; + height: 40px; +} +.shop_head_armoire_minerHelmet { + background-image: url(spritesmith-main-3.png); + background-position: -1325px -1547px; + width: 40px; + height: 40px; +} +.shop_head_armoire_orangeCat { + background-image: url(spritesmith-main-3.png); + background-position: -1366px -1547px; + width: 40px; + height: 40px; +} +.shop_head_armoire_plagueDoctorHat { + background-image: url(spritesmith-main-3.png); + background-position: -1407px -1547px; + width: 40px; + height: 40px; +} +.shop_head_armoire_rancherHat { + background-image: url(spritesmith-main-3.png); + background-position: -1448px -1547px; + width: 40px; + height: 40px; +} +.shop_head_armoire_redFloppyHat { + background-image: url(spritesmith-main-3.png); + background-position: -1489px -1547px; + width: 40px; + height: 40px; +} +.shop_head_armoire_redHairbow { + background-image: url(spritesmith-main-3.png); + background-position: -1530px -1547px; + width: 40px; + height: 40px; +} +.shop_head_armoire_royalCrown { + background-image: url(spritesmith-main-3.png); + background-position: -1571px -1547px; + width: 40px; + height: 40px; +} +.shop_head_armoire_shepherdHeaddress { + background-image: url(spritesmith-main-3.png); + background-position: -546px -1588px; + width: 40px; + height: 40px; +} +.shop_head_armoire_violetFloppyHat { + background-image: url(spritesmith-main-3.png); + background-position: -587px -1588px; + width: 40px; + height: 40px; +} +.shop_head_armoire_yellowHairbow { + background-image: url(spritesmith-main-3.png); + background-position: -628px -1588px; + width: 40px; + height: 40px; +} +.shop_shield_armoire_dragonTamerShield { + background-image: url(spritesmith-main-3.png); + background-position: -710px -1588px; + width: 40px; + height: 40px; +} +.shop_shield_armoire_floralBouquet { + background-image: url(spritesmith-main-3.png); + background-position: -751px -1588px; + width: 40px; + height: 40px; +} +.shop_shield_armoire_gladiatorShield { + background-image: url(spritesmith-main-3.png); + background-position: -792px -1588px; + width: 40px; + height: 40px; +} +.shop_shield_armoire_midnightShield { + background-image: url(spritesmith-main-3.png); + background-position: -833px -1588px; + width: 40px; + height: 40px; +} +.shop_shield_armoire_mysticLamp { + background-image: url(spritesmith-main-3.png); + background-position: -874px -1588px; + width: 40px; + height: 40px; +} +.shop_shield_armoire_perchingFalcon { + background-image: url(spritesmith-main-3.png); + background-position: -1638px -779px; + width: 40px; + height: 40px; +} +.shop_shield_armoire_royalCane { + background-image: url(spritesmith-main-3.png); + background-position: -956px -1588px; + width: 40px; + height: 40px; +} +.shop_shield_armoire_sandyBucket { + background-image: url(spritesmith-main-3.png); + background-position: -997px -1588px; + width: 40px; + height: 40px; +} +.shop_weapon_armoire_barristerGavel { + background-image: url(spritesmith-main-3.png); + background-position: -1038px -1588px; + width: 40px; + height: 40px; +} +.shop_weapon_armoire_basicCrossbow { + background-image: url(spritesmith-main-3.png); + background-position: -1079px -1588px; + width: 40px; + height: 40px; +} +.shop_weapon_armoire_basicLongbow { + background-image: url(spritesmith-main-3.png); + background-position: -1120px -1588px; + width: 40px; + height: 40px; +} +.shop_weapon_armoire_batWand { + background-image: url(spritesmith-main-3.png); + background-position: -1161px -1588px; + width: 40px; + height: 40px; +} +.shop_weapon_armoire_blueLongbow { + background-image: url(spritesmith-main-3.png); + background-position: -1202px -1588px; + width: 40px; + height: 40px; +} +.shop_weapon_armoire_cannon { + background-image: url(spritesmith-main-3.png); + background-position: -1243px -1588px; + width: 40px; + height: 40px; +} +.shop_weapon_armoire_crystalCrescentStaff { + background-image: url(spritesmith-main-3.png); + background-position: -1284px -1588px; + width: 40px; + height: 40px; +} +.shop_weapon_armoire_glowingSpear { + background-image: url(spritesmith-main-3.png); + background-position: -1325px -1588px; + width: 40px; + height: 40px; +} +.shop_weapon_armoire_goldWingStaff { + background-image: url(spritesmith-main-3.png); + background-position: -1366px -1588px; + width: 40px; + height: 40px; +} +.shop_weapon_armoire_habiticanDiploma { + background-image: url(spritesmith-main-3.png); + background-position: -1407px -1588px; + width: 40px; + height: 40px; +} +.shop_weapon_armoire_ironCrook { + background-image: url(spritesmith-main-3.png); + background-position: -1448px -1588px; + width: 40px; + height: 40px; +} +.shop_weapon_armoire_jesterBaton { + background-image: url(spritesmith-main-3.png); + background-position: -1489px -1588px; + width: 40px; + height: 40px; +} +.shop_weapon_armoire_lunarSceptre { + background-image: url(spritesmith-main-3.png); + background-position: -1530px -1588px; + width: 40px; + height: 40px; +} +.shop_weapon_armoire_miningPickax { + background-image: url(spritesmith-main-3.png); + background-position: -1571px -1588px; + width: 40px; + height: 40px; +} +.shop_weapon_armoire_mythmakerSword { + background-image: url(spritesmith-main-3.png); + background-position: -1638px 0px; + width: 40px; + height: 40px; +} +.shop_weapon_armoire_rancherLasso { + background-image: url(spritesmith-main-3.png); + background-position: -1638px -41px; + width: 40px; + height: 40px; +} +.shop_weapon_armoire_sandySpade { + background-image: url(spritesmith-main-3.png); + background-position: -1638px -82px; + width: 40px; + height: 40px; +} +.shop_weapon_armoire_shepherdsCrook { + background-image: url(spritesmith-main-3.png); + background-position: -1638px -123px; + width: 40px; + height: 40px; +} +.slim_armor_armoire_barristerRobes { + background-image: url(spritesmith-main-3.png); + background-position: -364px -1547px; + width: 90px; + height: 90px; +} +.slim_armor_armoire_basicArcherArmor { + background-image: url(spritesmith-main-3.png); + background-position: -273px -1547px; + width: 90px; + height: 90px; +} +.slim_armor_armoire_cannoneerRags { + background-image: url(spritesmith-main-3.png); + background-position: -182px -1547px; + width: 90px; + height: 90px; +} +.slim_armor_armoire_crystalCrescentRobes { + background-image: url(spritesmith-main-3.png); + background-position: -91px -1547px; + width: 90px; + height: 90px; +} +.slim_armor_armoire_dragonTamerArmor { + background-image: url(spritesmith-main-3.png); + background-position: 0px -1547px; + width: 90px; + height: 90px; +} +.slim_armor_armoire_falconerArmor { + background-image: url(spritesmith-main-3.png); + background-position: -1547px -1456px; + width: 90px; + height: 90px; +} +.slim_armor_armoire_gladiatorArmor { + background-image: url(spritesmith-main-3.png); + background-position: -1547px -1365px; + width: 90px; + height: 90px; +} +.slim_armor_armoire_goldenToga { + background-image: url(spritesmith-main-3.png); + background-position: -1547px -1274px; + width: 90px; + height: 90px; +} +.slim_armor_armoire_graduateRobe { + background-image: url(spritesmith-main-3.png); + background-position: -1547px -1183px; + width: 90px; + height: 90px; +} +.slim_armor_armoire_hornedIronArmor { + background-image: url(spritesmith-main-3.png); + background-position: -1547px -1092px; + width: 90px; + height: 90px; +} +.slim_armor_armoire_jesterCostume { + background-image: url(spritesmith-main-3.png); + background-position: -1547px -1001px; + width: 90px; + height: 90px; +} +.slim_armor_armoire_lunarArmor { + background-image: url(spritesmith-main-3.png); + background-position: -1547px -910px; + width: 90px; + height: 90px; +} +.slim_armor_armoire_minerOveralls { + background-image: url(spritesmith-main-3.png); + background-position: -1547px -819px; + width: 90px; + height: 90px; +} +.slim_armor_armoire_plagueDoctorOvercoat { + background-image: url(spritesmith-main-3.png); + background-position: -1547px -728px; + width: 90px; + height: 90px; +} +.slim_armor_armoire_rancherRobes { + background-image: url(spritesmith-main-3.png); + background-position: -1547px -637px; + width: 90px; + height: 90px; +} +.slim_armor_armoire_royalRobes { + background-image: url(spritesmith-main-3.png); + background-position: -455px -1547px; width: 90px; height: 90px; } diff --git a/common/dist/sprites/spritesmith-main-3.png b/common/dist/sprites/spritesmith-main-3.png index a119e0b6fb..6350f34be7 100644 Binary files a/common/dist/sprites/spritesmith-main-3.png and b/common/dist/sprites/spritesmith-main-3.png differ diff --git a/common/dist/sprites/spritesmith-main-4.css b/common/dist/sprites/spritesmith-main-4.css index 92aeb24176..8614bf953a 100644 --- a/common/dist/sprites/spritesmith-main-4.css +++ b/common/dist/sprites/spritesmith-main-4.css @@ -1,540 +1,612 @@ +.slim_armor_armoire_shepherdRobes { + background-image: url(spritesmith-main-4.png); + background-position: -651px -291px; + width: 90px; + height: 90px; +} +.slim_armor_armoire_stripedSwimsuit { + background-image: url(spritesmith-main-4.png); + background-position: -1473px -91px; + width: 90px; + height: 90px; +} +.weapon_armoire_barristerGavel { + background-image: url(spritesmith-main-4.png); + background-position: -910px -1395px; + width: 90px; + height: 90px; +} +.weapon_armoire_basicCrossbow { + background-image: url(spritesmith-main-4.png); + background-position: -1001px -1395px; + width: 90px; + height: 90px; +} +.weapon_armoire_basicLongbow { + background-image: url(spritesmith-main-4.png); + background-position: -1092px -1395px; + width: 90px; + height: 90px; +} +.weapon_armoire_batWand { + background-image: url(spritesmith-main-4.png); + background-position: -651px -473px; + width: 90px; + height: 90px; +} +.weapon_armoire_blueLongbow { + background-image: url(spritesmith-main-4.png); + background-position: -637px -849px; + width: 90px; + height: 90px; +} +.weapon_armoire_cannon { + background-image: url(spritesmith-main-4.png); + background-position: -728px -849px; + width: 90px; + height: 90px; +} +.weapon_armoire_crystalCrescentStaff { + background-image: url(spritesmith-main-4.png); + background-position: -1018px -91px; + width: 90px; + height: 90px; +} +.weapon_armoire_glowingSpear { + background-image: url(spritesmith-main-4.png); + background-position: -1018px -182px; + width: 90px; + height: 90px; +} +.weapon_armoire_goldWingStaff { + background-image: url(spritesmith-main-4.png); + background-position: -1018px -364px; + width: 90px; + height: 90px; +} +.weapon_armoire_habiticanDiploma { + background-image: url(spritesmith-main-4.png); + background-position: -1018px -455px; + width: 90px; + height: 90px; +} .weapon_armoire_ironCrook { background-image: url(spritesmith-main-4.png); - background-position: -546px -1046px; + background-position: -1018px -819px; width: 90px; height: 90px; } .weapon_armoire_jesterBaton { background-image: url(spritesmith-main-4.png); - background-position: -1479px -91px; + background-position: 0px -940px; width: 90px; height: 90px; } .weapon_armoire_lunarSceptre { background-image: url(spritesmith-main-4.png); - background-position: -910px -1046px; + background-position: -182px -940px; width: 90px; height: 90px; } .weapon_armoire_miningPickax { background-image: url(spritesmith-main-4.png); - background-position: -1001px -1046px; + background-position: -273px -940px; width: 90px; height: 90px; } .weapon_armoire_mythmakerSword { background-image: url(spritesmith-main-4.png); - background-position: -1206px 0px; + background-position: -546px -940px; width: 90px; height: 90px; } .weapon_armoire_rancherLasso { background-image: url(spritesmith-main-4.png); - background-position: -1206px -91px; + background-position: -1109px -273px; width: 90px; height: 90px; } .weapon_armoire_sandySpade { background-image: url(spritesmith-main-4.png); - background-position: -1206px -455px; + background-position: -182px -1031px; width: 90px; height: 90px; } .weapon_armoire_shepherdsCrook { background-image: url(spritesmith-main-4.png); - background-position: -1206px -546px; + background-position: -1200px -91px; width: 90px; height: 90px; } .broad_armor_healer_1 { background-image: url(spritesmith-main-4.png); - background-position: -1206px -910px; + background-position: -1200px -182px; width: 90px; height: 90px; } .broad_armor_healer_2 { background-image: url(spritesmith-main-4.png); - background-position: -1297px -728px; + background-position: -1200px -273px; width: 90px; height: 90px; } .broad_armor_healer_3 { background-image: url(spritesmith-main-4.png); - background-position: -1297px -819px; + background-position: -1200px -637px; width: 90px; height: 90px; } .broad_armor_healer_4 { background-image: url(spritesmith-main-4.png); - background-position: -1297px -1001px; + background-position: -1200px -728px; width: 90px; height: 90px; } .broad_armor_healer_5 { background-image: url(spritesmith-main-4.png); - background-position: -1388px -91px; + background-position: -1200px -910px; width: 90px; height: 90px; } .broad_armor_rogue_1 { background-image: url(spritesmith-main-4.png); - background-position: -1388px -364px; + background-position: -1200px -1001px; width: 90px; height: 90px; } .broad_armor_rogue_2 { background-image: url(spritesmith-main-4.png); - background-position: -1388px -1092px; + background-position: -273px -1122px; width: 90px; height: 90px; } .broad_armor_rogue_3 { background-image: url(spritesmith-main-4.png); - background-position: -1479px -637px; + background-position: -364px -1122px; width: 90px; height: 90px; } .broad_armor_rogue_4 { background-image: url(spritesmith-main-4.png); - background-position: -933px 0px; + background-position: -455px -1213px; width: 90px; height: 90px; } .broad_armor_rogue_5 { background-image: url(spritesmith-main-4.png); - background-position: -933px -546px; + background-position: -546px -1213px; width: 90px; height: 90px; } .broad_armor_special_2 { background-image: url(spritesmith-main-4.png); - background-position: -933px -637px; + background-position: -637px -1213px; width: 90px; height: 90px; } .broad_armor_special_finnedOceanicArmor { background-image: url(spritesmith-main-4.png); - background-position: -182px -864px; + background-position: -819px -1213px; width: 90px; height: 90px; } .broad_armor_warrior_1 { background-image: url(spritesmith-main-4.png); - background-position: -273px -864px; + background-position: -1382px -910px; width: 90px; height: 90px; } .broad_armor_warrior_2 { background-image: url(spritesmith-main-4.png); - background-position: -455px -864px; + background-position: -1382px -1001px; width: 90px; height: 90px; } .broad_armor_warrior_3 { background-image: url(spritesmith-main-4.png); - background-position: -546px -864px; + background-position: 0px -1304px; width: 90px; height: 90px; } .broad_armor_warrior_4 { background-image: url(spritesmith-main-4.png); - background-position: -910px -864px; + background-position: -1473px -910px; width: 90px; height: 90px; } .broad_armor_warrior_5 { background-image: url(spritesmith-main-4.png); - background-position: -1024px 0px; + background-position: -1473px -1274px; width: 90px; height: 90px; } .broad_armor_wizard_1 { background-image: url(spritesmith-main-4.png); - background-position: -1024px -182px; + background-position: -182px -1395px; width: 90px; height: 90px; } .broad_armor_wizard_2 { background-image: url(spritesmith-main-4.png); - background-position: -1024px -273px; + background-position: -273px -1395px; width: 90px; height: 90px; } .broad_armor_wizard_3 { background-image: url(spritesmith-main-4.png); - background-position: -1024px -546px; + background-position: -546px -1395px; width: 90px; height: 90px; } .broad_armor_wizard_4 { background-image: url(spritesmith-main-4.png); - background-position: -1115px -546px; + background-position: -637px -1395px; width: 90px; height: 90px; } .broad_armor_wizard_5 { background-image: url(spritesmith-main-4.png); - background-position: -455px -1046px; + background-position: -728px -1395px; width: 90px; height: 90px; } .shop_armor_healer_1 { background-image: url(spritesmith-main-4.png); - background-position: -1661px -1025px; + background-position: -1655px -369px; width: 40px; height: 40px; } .shop_armor_healer_2 { background-image: url(spritesmith-main-4.png); - background-position: -1661px -984px; + background-position: -1655px -328px; width: 40px; height: 40px; } .shop_armor_healer_3 { background-image: url(spritesmith-main-4.png); - background-position: -1661px -943px; + background-position: -1655px -287px; width: 40px; height: 40px; } .shop_armor_healer_4 { background-image: url(spritesmith-main-4.png); - background-position: -1661px -902px; + background-position: -1655px -246px; width: 40px; height: 40px; } .shop_armor_healer_5 { background-image: url(spritesmith-main-4.png); - background-position: -1661px -861px; + background-position: -1655px -205px; width: 40px; height: 40px; } .shop_armor_rogue_1 { background-image: url(spritesmith-main-4.png); - background-position: -1661px -820px; + background-position: -1655px -164px; width: 40px; height: 40px; } .shop_armor_rogue_2 { background-image: url(spritesmith-main-4.png); - background-position: -1661px -779px; + background-position: -1655px -123px; width: 40px; height: 40px; } .shop_armor_rogue_3 { background-image: url(spritesmith-main-4.png); - background-position: -1661px -738px; + background-position: -1655px -82px; width: 40px; height: 40px; } .shop_armor_rogue_4 { background-image: url(spritesmith-main-4.png); - background-position: -1661px -697px; + background-position: -1655px -41px; width: 40px; height: 40px; } .shop_armor_rogue_5 { background-image: url(spritesmith-main-4.png); - background-position: -1661px -656px; + background-position: -1655px 0px; width: 40px; height: 40px; } .shop_armor_special_0 { background-image: url(spritesmith-main-4.png); - background-position: -1661px -615px; + background-position: -1599px -1609px; width: 40px; height: 40px; } .shop_armor_special_1 { background-image: url(spritesmith-main-4.png); - background-position: -1661px -574px; + background-position: -1558px -1609px; width: 40px; height: 40px; } .shop_armor_special_2 { background-image: url(spritesmith-main-4.png); - background-position: -1661px -533px; + background-position: -1517px -1609px; width: 40px; height: 40px; } .shop_armor_special_finnedOceanicArmor { background-image: url(spritesmith-main-4.png); - background-position: -1661px -492px; + background-position: -1476px -1609px; width: 40px; height: 40px; } .shop_armor_warrior_1 { background-image: url(spritesmith-main-4.png); - background-position: -1661px -451px; + background-position: -1435px -1609px; width: 40px; height: 40px; } .shop_armor_warrior_2 { background-image: url(spritesmith-main-4.png); - background-position: -1661px -410px; + background-position: -1394px -1609px; width: 40px; height: 40px; } .shop_armor_warrior_3 { background-image: url(spritesmith-main-4.png); - background-position: -1661px -369px; + background-position: -1353px -1609px; width: 40px; height: 40px; } .shop_armor_warrior_4 { background-image: url(spritesmith-main-4.png); - background-position: -1661px -328px; + background-position: -1312px -1609px; width: 40px; height: 40px; } .shop_armor_warrior_5 { background-image: url(spritesmith-main-4.png); - background-position: -1661px -287px; + background-position: -1271px -1609px; width: 40px; height: 40px; } .shop_armor_wizard_1 { background-image: url(spritesmith-main-4.png); - background-position: -1661px -246px; + background-position: -1230px -1609px; width: 40px; height: 40px; } .shop_armor_wizard_2 { background-image: url(spritesmith-main-4.png); - background-position: -1661px -205px; + background-position: -1189px -1609px; width: 40px; height: 40px; } .shop_armor_wizard_3 { background-image: url(spritesmith-main-4.png); - background-position: -1661px -164px; + background-position: -1148px -1609px; width: 40px; height: 40px; } .shop_armor_wizard_4 { background-image: url(spritesmith-main-4.png); - background-position: -1661px -123px; + background-position: -1107px -1609px; width: 40px; height: 40px; } .shop_armor_wizard_5 { background-image: url(spritesmith-main-4.png); - background-position: -1661px -82px; + background-position: -1066px -1609px; width: 40px; height: 40px; } .slim_armor_healer_1 { background-image: url(spritesmith-main-4.png); - background-position: -728px -1410px; + background-position: -836px -273px; width: 90px; height: 90px; } .slim_armor_healer_2 { background-image: url(spritesmith-main-4.png); - background-position: -1001px -1410px; + background-position: -836px -364px; width: 90px; height: 90px; } .slim_armor_healer_3 { background-image: url(spritesmith-main-4.png); - background-position: -1092px -1410px; + background-position: -836px -455px; width: 90px; height: 90px; } .slim_armor_healer_4 { background-image: url(spritesmith-main-4.png); - background-position: -1183px -1410px; + background-position: -836px -546px; width: 90px; height: 90px; } .slim_armor_healer_5 { background-image: url(spritesmith-main-4.png); - background-position: -1570px -455px; + background-position: -836px -637px; width: 90px; height: 90px; } .slim_armor_rogue_1 { background-image: url(spritesmith-main-4.png); - background-position: -1570px -546px; + background-position: 0px -758px; width: 90px; height: 90px; } .slim_armor_rogue_2 { background-image: url(spritesmith-main-4.png); - background-position: -1570px -728px; + background-position: -91px -758px; width: 90px; height: 90px; } .slim_armor_rogue_3 { background-image: url(spritesmith-main-4.png); - background-position: -1570px -819px; + background-position: -182px -758px; width: 90px; height: 90px; } .slim_armor_rogue_4 { background-image: url(spritesmith-main-4.png); - background-position: -1570px -910px; + background-position: -273px -758px; width: 90px; height: 90px; } .slim_armor_rogue_5 { background-image: url(spritesmith-main-4.png); - background-position: -839px -546px; + background-position: -364px -758px; width: 90px; height: 90px; } .slim_armor_special_2 { background-image: url(spritesmith-main-4.png); - background-position: -839px -637px; + background-position: -455px -758px; width: 90px; height: 90px; } .slim_armor_special_finnedOceanicArmor { background-image: url(spritesmith-main-4.png); - background-position: -748px -291px; + background-position: -546px -758px; width: 90px; height: 90px; } .slim_armor_warrior_1 { background-image: url(spritesmith-main-4.png); - background-position: -748px -382px; + background-position: -637px -758px; width: 90px; height: 90px; } .slim_armor_warrior_2 { background-image: url(spritesmith-main-4.png); - background-position: -748px -473px; + background-position: -728px -758px; width: 90px; height: 90px; } .slim_armor_warrior_3 { background-image: url(spritesmith-main-4.png); - background-position: -748px -564px; + background-position: -819px -758px; width: 90px; height: 90px; } .slim_armor_warrior_4 { background-image: url(spritesmith-main-4.png); - background-position: 0px -773px; + background-position: -927px 0px; width: 90px; height: 90px; } .slim_armor_warrior_5 { background-image: url(spritesmith-main-4.png); - background-position: -91px -773px; + background-position: -927px -91px; width: 90px; height: 90px; } .slim_armor_wizard_1 { background-image: url(spritesmith-main-4.png); - background-position: -182px -773px; + background-position: -927px -182px; width: 90px; height: 90px; } .slim_armor_wizard_2 { background-image: url(spritesmith-main-4.png); - background-position: -273px -773px; + background-position: -927px -273px; width: 90px; height: 90px; } .slim_armor_wizard_3 { background-image: url(spritesmith-main-4.png); - background-position: -364px -773px; + background-position: -927px -364px; width: 90px; height: 90px; } .slim_armor_wizard_4 { background-image: url(spritesmith-main-4.png); - background-position: -455px -773px; + background-position: -927px -455px; width: 90px; height: 90px; } .slim_armor_wizard_5 { background-image: url(spritesmith-main-4.png); - background-position: -546px -773px; + background-position: -927px -546px; width: 90px; height: 90px; } .broad_armor_special_birthday { background-image: url(spritesmith-main-4.png); - background-position: -637px -773px; + background-position: -927px -637px; width: 90px; height: 90px; } .broad_armor_special_birthday2015 { background-image: url(spritesmith-main-4.png); - background-position: -728px -773px; + background-position: -927px -728px; width: 90px; height: 90px; } .broad_armor_special_birthday2016 { background-image: url(spritesmith-main-4.png); - background-position: -819px -773px; + background-position: 0px -849px; width: 90px; height: 90px; } .shop_armor_special_birthday { background-image: url(spritesmith-main-4.png); - background-position: -1661px -41px; + background-position: -1025px -1609px; width: 40px; height: 40px; } .shop_armor_special_birthday2015 { background-image: url(spritesmith-main-4.png); - background-position: -1661px 0px; + background-position: -984px -1609px; width: 40px; height: 40px; } .shop_armor_special_birthday2016 { background-image: url(spritesmith-main-4.png); - background-position: -1599px -1583px; + background-position: -943px -1609px; width: 40px; height: 40px; } .slim_armor_special_birthday { background-image: url(spritesmith-main-4.png); - background-position: -933px -273px; + background-position: -364px -849px; width: 90px; height: 90px; } .slim_armor_special_birthday2015 { background-image: url(spritesmith-main-4.png); - background-position: -933px -364px; + background-position: -455px -849px; width: 90px; height: 90px; } .slim_armor_special_birthday2016 { background-image: url(spritesmith-main-4.png); - background-position: -933px -455px; + background-position: -546px -849px; width: 90px; height: 90px; } .broad_armor_special_fall2015Healer { background-image: url(spritesmith-main-4.png); - background-position: -839px -364px; + background-position: -503px -470px; width: 93px; height: 90px; } .broad_armor_special_fall2015Mage { background-image: url(spritesmith-main-4.png); - background-position: -106px -288px; + background-position: -318px -379px; width: 105px; height: 90px; } .broad_armor_special_fall2015Rogue { background-image: url(spritesmith-main-4.png); - background-position: -933px -728px; + background-position: -819px -849px; width: 90px; height: 90px; } .broad_armor_special_fall2015Warrior { background-image: url(spritesmith-main-4.png); - background-position: 0px -864px; + background-position: -910px -849px; width: 90px; height: 90px; } .broad_armor_special_fallHealer { background-image: url(spritesmith-main-4.png); - background-position: -91px -864px; + background-position: -1018px 0px; width: 90px; height: 90px; } @@ -546,43 +618,43 @@ } .broad_armor_special_fallRogue { background-image: url(spritesmith-main-4.png); - background-position: -212px -288px; + background-position: -194px -182px; width: 105px; height: 90px; } .broad_armor_special_fallWarrior { background-image: url(spritesmith-main-4.png); - background-position: -364px -864px; + background-position: -1018px -273px; width: 90px; height: 90px; } .head_special_fall2015Healer { background-image: url(spritesmith-main-4.png); - background-position: -839px -273px; + background-position: -742px -546px; width: 93px; height: 90px; } .head_special_fall2015Mage { background-image: url(spritesmith-main-4.png); - background-position: -318px -288px; + background-position: -363px 0px; width: 105px; height: 90px; } .head_special_fall2015Rogue { background-image: url(spritesmith-main-4.png); - background-position: -637px -864px; + background-position: -1018px -546px; width: 90px; height: 90px; } .head_special_fall2015Warrior { background-image: url(spritesmith-main-4.png); - background-position: -728px -864px; + background-position: -1018px -637px; width: 90px; height: 90px; } .head_special_fallHealer { background-image: url(spritesmith-main-4.png); - background-position: -819px -864px; + background-position: -1018px -728px; width: 90px; height: 90px; } @@ -594,2059 +666,2089 @@ } .head_special_fallRogue { background-image: url(spritesmith-main-4.png); - background-position: -273px -379px; + background-position: -363px -197px; width: 105px; height: 90px; } .head_special_fallWarrior { background-image: url(spritesmith-main-4.png); - background-position: -1024px -91px; + background-position: -91px -940px; width: 90px; height: 90px; } .shield_special_fall2015Healer { background-image: url(spritesmith-main-4.png); - background-position: -839px 0px; + background-position: -188px -576px; width: 93px; height: 90px; } .shield_special_fall2015Rogue { background-image: url(spritesmith-main-4.png); - background-position: -379px -379px; + background-position: 0px -288px; width: 105px; height: 90px; } .shield_special_fall2015Warrior { background-image: url(spritesmith-main-4.png); - background-position: -1024px -364px; + background-position: -364px -940px; width: 90px; height: 90px; } .shield_special_fallHealer { background-image: url(spritesmith-main-4.png); - background-position: -1024px -455px; + background-position: -455px -940px; width: 90px; height: 90px; } .shield_special_fallRogue { background-image: url(spritesmith-main-4.png); - background-position: 0px -485px; + background-position: -106px -288px; width: 105px; height: 90px; } .shield_special_fallWarrior { background-image: url(spritesmith-main-4.png); - background-position: -1024px -637px; + background-position: -637px -940px; width: 90px; height: 90px; } .shop_armor_special_fall2015Healer { background-image: url(spritesmith-main-4.png); - background-position: -1558px -1583px; + background-position: -902px -1609px; width: 40px; height: 40px; } .shop_armor_special_fall2015Mage { background-image: url(spritesmith-main-4.png); - background-position: -1517px -1583px; + background-position: -861px -1609px; width: 40px; height: 40px; } .shop_armor_special_fall2015Rogue { background-image: url(spritesmith-main-4.png); - background-position: -1476px -1583px; + background-position: -820px -1609px; width: 40px; height: 40px; } .shop_armor_special_fall2015Warrior { background-image: url(spritesmith-main-4.png); - background-position: -1435px -1583px; + background-position: -82px -1568px; width: 40px; height: 40px; } .shop_armor_special_fallHealer { background-image: url(spritesmith-main-4.png); - background-position: -1394px -1583px; + background-position: -41px -1568px; width: 40px; height: 40px; } .shop_armor_special_fallMage { background-image: url(spritesmith-main-4.png); - background-position: -1353px -1583px; + background-position: 0px -1568px; width: 40px; height: 40px; } .shop_armor_special_fallRogue { background-image: url(spritesmith-main-4.png); - background-position: -1312px -1583px; + background-position: -1599px -1527px; width: 40px; height: 40px; } .shop_armor_special_fallWarrior { background-image: url(spritesmith-main-4.png); - background-position: -1271px -1583px; + background-position: -469px -318px; width: 40px; height: 40px; } .shop_head_special_fall2015Healer { background-image: url(spritesmith-main-4.png); - background-position: -1230px -1583px; + background-position: -1517px -1527px; width: 40px; height: 40px; } .shop_head_special_fall2015Mage { background-image: url(spritesmith-main-4.png); - background-position: -1189px -1583px; + background-position: -1476px -1527px; width: 40px; height: 40px; } .shop_head_special_fall2015Rogue { background-image: url(spritesmith-main-4.png); - background-position: -1148px -1583px; + background-position: -1435px -1527px; width: 40px; height: 40px; } .shop_head_special_fall2015Warrior { background-image: url(spritesmith-main-4.png); - background-position: -1107px -1583px; + background-position: -1394px -1527px; width: 40px; height: 40px; } .shop_head_special_fallHealer { background-image: url(spritesmith-main-4.png); - background-position: -1066px -1583px; + background-position: -1353px -1527px; width: 40px; height: 40px; } .shop_head_special_fallMage { background-image: url(spritesmith-main-4.png); - background-position: -1025px -1583px; + background-position: -1312px -1527px; width: 40px; height: 40px; } .shop_head_special_fallRogue { background-image: url(spritesmith-main-4.png); - background-position: -984px -1583px; + background-position: -1271px -1527px; width: 40px; height: 40px; } .shop_head_special_fallWarrior { background-image: url(spritesmith-main-4.png); - background-position: -943px -1583px; + background-position: -1230px -1527px; width: 40px; height: 40px; } .shop_shield_special_fall2015Healer { background-image: url(spritesmith-main-4.png); - background-position: -205px -1542px; + background-position: -1189px -1527px; width: 40px; height: 40px; } .shop_shield_special_fall2015Rogue { background-image: url(spritesmith-main-4.png); - background-position: -164px -1542px; + background-position: -1148px -1527px; width: 40px; height: 40px; } .shop_shield_special_fall2015Warrior { background-image: url(spritesmith-main-4.png); - background-position: -123px -1542px; + background-position: -1107px -1527px; width: 40px; height: 40px; } .shop_shield_special_fallHealer { background-image: url(spritesmith-main-4.png); - background-position: -82px -1542px; + background-position: -1066px -1527px; width: 40px; height: 40px; } .shop_shield_special_fallRogue { background-image: url(spritesmith-main-4.png); - background-position: -41px -1542px; + background-position: -1025px -1527px; width: 40px; height: 40px; } .shop_shield_special_fallWarrior { background-image: url(spritesmith-main-4.png); - background-position: 0px -1542px; + background-position: -984px -1527px; width: 40px; height: 40px; } .shop_weapon_special_fall2015Healer { background-image: url(spritesmith-main-4.png); - background-position: -1599px -1501px; + background-position: -943px -1527px; width: 40px; height: 40px; } .shop_weapon_special_fall2015Mage { background-image: url(spritesmith-main-4.png); - background-position: -1558px -1501px; + background-position: -902px -1527px; width: 40px; height: 40px; } .shop_weapon_special_fall2015Rogue { background-image: url(spritesmith-main-4.png); - background-position: -1517px -1501px; + background-position: -861px -1527px; width: 40px; height: 40px; } .shop_weapon_special_fall2015Warrior { background-image: url(spritesmith-main-4.png); - background-position: -1476px -1501px; + background-position: -820px -1527px; width: 40px; height: 40px; } .shop_weapon_special_fallHealer { background-image: url(spritesmith-main-4.png); - background-position: -1435px -1501px; + background-position: -779px -1527px; width: 40px; height: 40px; } .shop_weapon_special_fallMage { background-image: url(spritesmith-main-4.png); - background-position: -1394px -1501px; + background-position: -738px -1527px; width: 40px; height: 40px; } .shop_weapon_special_fallRogue { background-image: url(spritesmith-main-4.png); - background-position: -1353px -1501px; + background-position: -697px -1527px; width: 40px; height: 40px; } .shop_weapon_special_fallWarrior { background-image: url(spritesmith-main-4.png); - background-position: -1312px -1501px; + background-position: -656px -1527px; width: 40px; height: 40px; } .slim_armor_special_fall2015Healer { background-image: url(spritesmith-main-4.png); - background-position: -564px -682px; + background-position: -94px -576px; width: 93px; height: 90px; } .slim_armor_special_fall2015Mage { background-image: url(spritesmith-main-4.png); - background-position: -106px -485px; + background-position: -318px -288px; width: 105px; height: 90px; } .slim_armor_special_fall2015Rogue { background-image: url(spritesmith-main-4.png); - background-position: -637px -1046px; + background-position: -1200px -364px; width: 90px; height: 90px; } .slim_armor_special_fall2015Warrior { background-image: url(spritesmith-main-4.png); - background-position: -728px -1046px; + background-position: -1200px -455px; width: 90px; height: 90px; } .slim_armor_special_fallHealer { background-image: url(spritesmith-main-4.png); - background-position: -819px -1046px; + background-position: -1200px -546px; width: 90px; height: 90px; } .slim_armor_special_fallMage { background-image: url(spritesmith-main-4.png); - background-position: 0px 0px; + background-position: -121px -91px; width: 120px; height: 90px; } .slim_armor_special_fallRogue { background-image: url(spritesmith-main-4.png); - background-position: -212px -485px; + background-position: 0px -379px; width: 105px; height: 90px; } .slim_armor_special_fallWarrior { background-image: url(spritesmith-main-4.png); - background-position: -1092px -1046px; + background-position: -1200px -819px; width: 90px; height: 90px; } .weapon_special_fall2015Healer { background-image: url(spritesmith-main-4.png); - background-position: -594px -576px; + background-position: 0px -576px; width: 93px; height: 90px; } .weapon_special_fall2015Mage { background-image: url(spritesmith-main-4.png); - background-position: -318px -485px; + background-position: -106px -379px; width: 105px; height: 90px; } .weapon_special_fall2015Rogue { background-image: url(spritesmith-main-4.png); - background-position: -1206px -182px; + background-position: 0px -1122px; width: 90px; height: 90px; } .weapon_special_fall2015Warrior { background-image: url(spritesmith-main-4.png); - background-position: -1206px -273px; + background-position: -91px -1122px; width: 90px; height: 90px; } .weapon_special_fallHealer { background-image: url(spritesmith-main-4.png); - background-position: -1206px -364px; + background-position: -182px -1122px; width: 90px; height: 90px; } .weapon_special_fallMage { background-image: url(spritesmith-main-4.png); - background-position: -121px -91px; + background-position: 0px 0px; width: 120px; height: 90px; } .weapon_special_fallRogue { background-image: url(spritesmith-main-4.png); - background-position: -424px -485px; + background-position: -212px -379px; width: 105px; height: 90px; } .weapon_special_fallWarrior { background-image: url(spritesmith-main-4.png); - background-position: -1206px -637px; + background-position: -455px -1122px; width: 90px; height: 90px; } .broad_armor_special_gaymerx { background-image: url(spritesmith-main-4.png); - background-position: -1206px -728px; + background-position: -546px -1122px; width: 90px; height: 90px; } .head_special_gaymerx { background-image: url(spritesmith-main-4.png); - background-position: -1206px -819px; + background-position: -637px -1122px; width: 90px; height: 90px; } .shop_armor_special_gaymerx { background-image: url(spritesmith-main-4.png); - background-position: -1271px -1501px; + background-position: -615px -1527px; width: 40px; height: 40px; } .shop_head_special_gaymerx { background-image: url(spritesmith-main-4.png); - background-position: -1230px -1501px; + background-position: -574px -1527px; width: 40px; height: 40px; } .slim_armor_special_gaymerx { background-image: url(spritesmith-main-4.png); - background-position: 0px -1137px; + background-position: -910px -1122px; width: 90px; height: 90px; } .back_mystery_201402 { background-image: url(spritesmith-main-4.png); - background-position: -91px -1137px; + background-position: -1001px -1122px; width: 90px; height: 90px; } .broad_armor_mystery_201402 { background-image: url(spritesmith-main-4.png); - background-position: -182px -1137px; + background-position: -1092px -1122px; width: 90px; height: 90px; } .head_mystery_201402 { background-image: url(spritesmith-main-4.png); - background-position: -273px -1137px; + background-position: -1183px -1122px; width: 90px; height: 90px; } .shop_armor_mystery_201402 { background-image: url(spritesmith-main-4.png); - background-position: -1189px -1501px; + background-position: -533px -1527px; width: 40px; height: 40px; } .shop_back_mystery_201402 { background-image: url(spritesmith-main-4.png); - background-position: -1148px -1501px; + background-position: -492px -1527px; width: 40px; height: 40px; } .shop_head_mystery_201402 { background-image: url(spritesmith-main-4.png); - background-position: -1107px -1501px; + background-position: -451px -1527px; width: 40px; height: 40px; } .slim_armor_mystery_201402 { background-image: url(spritesmith-main-4.png); - background-position: -637px -1137px; + background-position: -1291px -273px; width: 90px; height: 90px; } .broad_armor_mystery_201403 { background-image: url(spritesmith-main-4.png); - background-position: -728px -1137px; + background-position: -1291px -364px; width: 90px; height: 90px; } .headAccessory_mystery_201403 { background-image: url(spritesmith-main-4.png); - background-position: -819px -1137px; + background-position: -1291px -455px; width: 90px; height: 90px; } .shop_armor_mystery_201403 { background-image: url(spritesmith-main-4.png); - background-position: -1066px -1501px; + background-position: -410px -1527px; width: 40px; height: 40px; } .shop_headAccessory_mystery_201403 { background-image: url(spritesmith-main-4.png); - background-position: -1025px -1501px; + background-position: -369px -1527px; width: 40px; height: 40px; } .slim_armor_mystery_201403 { background-image: url(spritesmith-main-4.png); - background-position: -1092px -1137px; + background-position: -1291px -728px; width: 90px; height: 90px; } .back_mystery_201404 { background-image: url(spritesmith-main-4.png); - background-position: -1183px -1137px; + background-position: -1291px -819px; width: 90px; height: 90px; } .headAccessory_mystery_201404 { background-image: url(spritesmith-main-4.png); - background-position: -1297px 0px; + background-position: -1291px -910px; width: 90px; height: 90px; } .shop_back_mystery_201404 { background-image: url(spritesmith-main-4.png); - background-position: -984px -1501px; + background-position: -328px -1527px; width: 40px; height: 40px; } .shop_headAccessory_mystery_201404 { background-image: url(spritesmith-main-4.png); - background-position: -943px -1501px; + background-position: -287px -1527px; width: 40px; height: 40px; } .broad_armor_mystery_201405 { background-image: url(spritesmith-main-4.png); - background-position: -1297px -273px; + background-position: 0px -1213px; width: 90px; height: 90px; } .head_mystery_201405 { background-image: url(spritesmith-main-4.png); - background-position: -1297px -364px; + background-position: -91px -1213px; width: 90px; height: 90px; } .shop_armor_mystery_201405 { background-image: url(spritesmith-main-4.png); - background-position: -902px -1501px; + background-position: -246px -1527px; width: 40px; height: 40px; } .shop_head_mystery_201405 { background-image: url(spritesmith-main-4.png); - background-position: -861px -1501px; + background-position: -205px -1527px; width: 40px; height: 40px; } .slim_armor_mystery_201405 { background-image: url(spritesmith-main-4.png); - background-position: -1297px -637px; + background-position: -364px -1213px; width: 90px; height: 90px; } .broad_armor_mystery_201406 { background-image: url(spritesmith-main-4.png); - background-position: -748px -194px; + background-position: -651px -97px; width: 90px; height: 96px; } .head_mystery_201406 { background-image: url(spritesmith-main-4.png); - background-position: -748px -97px; + background-position: -651px -194px; width: 90px; height: 96px; } .shop_armor_mystery_201406 { background-image: url(spritesmith-main-4.png); - background-position: -820px -1501px; + background-position: -164px -1527px; width: 40px; height: 40px; } .shop_head_mystery_201406 { background-image: url(spritesmith-main-4.png); - background-position: -779px -1501px; + background-position: -123px -1527px; width: 40px; height: 40px; } .slim_armor_mystery_201406 { background-image: url(spritesmith-main-4.png); - background-position: -748px 0px; + background-position: -651px 0px; width: 90px; height: 96px; } .broad_armor_mystery_201407 { background-image: url(spritesmith-main-4.png); - background-position: 0px -1228px; + background-position: -910px -1213px; width: 90px; height: 90px; } .head_mystery_201407 { background-image: url(spritesmith-main-4.png); - background-position: -91px -1228px; + background-position: -1001px -1213px; width: 90px; height: 90px; } .shop_armor_mystery_201407 { background-image: url(spritesmith-main-4.png); - background-position: -738px -1501px; + background-position: -82px -1527px; width: 40px; height: 40px; } .shop_head_mystery_201407 { background-image: url(spritesmith-main-4.png); - background-position: -697px -1501px; + background-position: -41px -1527px; width: 40px; height: 40px; } .slim_armor_mystery_201407 { background-image: url(spritesmith-main-4.png); - background-position: -364px -1228px; + background-position: -1274px -1213px; width: 90px; height: 90px; } .broad_armor_mystery_201408 { background-image: url(spritesmith-main-4.png); - background-position: -455px -1228px; + background-position: -1382px 0px; width: 90px; height: 90px; } .head_mystery_201408 { background-image: url(spritesmith-main-4.png); - background-position: -546px -1228px; + background-position: -1382px -91px; width: 90px; height: 90px; } .shop_armor_mystery_201408 { background-image: url(spritesmith-main-4.png); - background-position: -656px -1501px; + background-position: 0px -1527px; width: 40px; height: 40px; } .shop_head_mystery_201408 { background-image: url(spritesmith-main-4.png); - background-position: -615px -1501px; + background-position: -1599px -1486px; width: 40px; height: 40px; } .slim_armor_mystery_201408 { background-image: url(spritesmith-main-4.png); - background-position: -819px -1228px; + background-position: -1382px -364px; width: 90px; height: 90px; } .broad_armor_mystery_201409 { background-image: url(spritesmith-main-4.png); - background-position: -910px -1228px; + background-position: -1382px -455px; width: 90px; height: 90px; } .headAccessory_mystery_201409 { background-image: url(spritesmith-main-4.png); - background-position: -1001px -1228px; + background-position: -1382px -546px; width: 90px; height: 90px; } .shop_armor_mystery_201409 { background-image: url(spritesmith-main-4.png); - background-position: -574px -1501px; + background-position: -1558px -1486px; width: 40px; height: 40px; } .shop_headAccessory_mystery_201409 { background-image: url(spritesmith-main-4.png); - background-position: -533px -1501px; + background-position: -1353px -1486px; width: 40px; height: 40px; } .slim_armor_mystery_201409 { background-image: url(spritesmith-main-4.png); - background-position: -1274px -1228px; + background-position: -1382px -819px; width: 90px; height: 90px; } .back_mystery_201410 { background-image: url(spritesmith-main-4.png); - background-position: 0px -682px; + background-position: -282px -576px; width: 93px; height: 90px; } .broad_armor_mystery_201410 { background-image: url(spritesmith-main-4.png); - background-position: -470px -682px; + background-position: -376px -576px; width: 93px; height: 90px; } .shop_armor_mystery_201410 { background-image: url(spritesmith-main-4.png); - background-position: -492px -1501px; + background-position: -1312px -1486px; width: 40px; height: 40px; } .shop_back_mystery_201410 { background-image: url(spritesmith-main-4.png); - background-position: -451px -1501px; + background-position: -1271px -1486px; width: 40px; height: 40px; } .slim_armor_mystery_201410 { background-image: url(spritesmith-main-4.png); - background-position: -94px -682px; + background-position: -742px -364px; width: 93px; height: 90px; } .head_mystery_201411 { background-image: url(spritesmith-main-4.png); - background-position: -1388px -455px; + background-position: -91px -1304px; width: 90px; height: 90px; } .shop_head_mystery_201411 { background-image: url(spritesmith-main-4.png); - background-position: -410px -1501px; + background-position: -1230px -1486px; width: 40px; height: 40px; } .shop_weapon_mystery_201411 { background-image: url(spritesmith-main-4.png); - background-position: -369px -1501px; + background-position: -1189px -1486px; width: 40px; height: 40px; } .weapon_mystery_201411 { background-image: url(spritesmith-main-4.png); - background-position: -1388px -728px; + background-position: -364px -1304px; width: 90px; height: 90px; } .broad_armor_mystery_201412 { background-image: url(spritesmith-main-4.png); - background-position: -1388px -819px; + background-position: -455px -1304px; width: 90px; height: 90px; } .head_mystery_201412 { background-image: url(spritesmith-main-4.png); - background-position: -1388px -910px; + background-position: -546px -1304px; width: 90px; height: 90px; } .shop_armor_mystery_201412 { background-image: url(spritesmith-main-4.png); - background-position: -328px -1501px; + background-position: -1148px -1486px; width: 40px; height: 40px; } .shop_head_mystery_201412 { background-image: url(spritesmith-main-4.png); - background-position: -287px -1501px; + background-position: -943px -1486px; width: 40px; height: 40px; } .slim_armor_mystery_201412 { background-image: url(spritesmith-main-4.png); - background-position: -1388px -1183px; + background-position: -819px -1304px; width: 90px; height: 90px; } .broad_armor_mystery_201501 { background-image: url(spritesmith-main-4.png); - background-position: 0px -1319px; + background-position: -910px -1304px; width: 90px; height: 90px; } .head_mystery_201501 { background-image: url(spritesmith-main-4.png); - background-position: -91px -1319px; + background-position: -1001px -1304px; width: 90px; height: 90px; } .shop_armor_mystery_201501 { background-image: url(spritesmith-main-4.png); - background-position: -246px -1501px; + background-position: -902px -1486px; width: 40px; height: 40px; } .shop_head_mystery_201501 { background-image: url(spritesmith-main-4.png); - background-position: -205px -1501px; + background-position: -861px -1486px; width: 40px; height: 40px; } .slim_armor_mystery_201501 { background-image: url(spritesmith-main-4.png); - background-position: -364px -1319px; + background-position: -1274px -1304px; width: 90px; height: 90px; } .headAccessory_mystery_201502 { background-image: url(spritesmith-main-4.png); - background-position: -455px -1319px; + background-position: -1365px -1304px; width: 90px; height: 90px; } .shop_headAccessory_mystery_201502 { background-image: url(spritesmith-main-4.png); - background-position: -164px -1501px; + background-position: -820px -1486px; width: 40px; height: 40px; } .shop_weapon_mystery_201502 { background-image: url(spritesmith-main-4.png); - background-position: -123px -1501px; + background-position: -1655px -410px; width: 40px; height: 40px; } .weapon_mystery_201502 { background-image: url(spritesmith-main-4.png); - background-position: -728px -1319px; + background-position: -1473px -182px; width: 90px; height: 90px; } .broad_armor_mystery_201503 { background-image: url(spritesmith-main-4.png); - background-position: -819px -1319px; + background-position: -1473px -273px; width: 90px; height: 90px; } .eyewear_mystery_201503 { background-image: url(spritesmith-main-4.png); - background-position: -910px -1319px; + background-position: -1473px -364px; width: 90px; height: 90px; } .shop_armor_mystery_201503 { background-image: url(spritesmith-main-4.png); - background-position: -82px -1501px; + background-position: -697px -1486px; width: 40px; height: 40px; } .shop_eyewear_mystery_201503 { background-image: url(spritesmith-main-4.png); - background-position: -41px -1501px; + background-position: -656px -1486px; width: 40px; height: 40px; } .slim_armor_mystery_201503 { background-image: url(spritesmith-main-4.png); - background-position: -1183px -1319px; + background-position: -1473px -637px; width: 90px; height: 90px; } .back_mystery_201504 { background-image: url(spritesmith-main-4.png); - background-position: -1274px -1319px; + background-position: -1473px -728px; width: 90px; height: 90px; } .broad_armor_mystery_201504 { background-image: url(spritesmith-main-4.png); - background-position: -1365px -1319px; + background-position: -1473px -819px; width: 90px; height: 90px; } .shop_armor_mystery_201504 { background-image: url(spritesmith-main-4.png); - background-position: -752px -682px; + background-position: -615px -1486px; width: 40px; height: 40px; } .shop_back_mystery_201504 { background-image: url(spritesmith-main-4.png); - background-position: -1661px -1066px; + background-position: -492px -1486px; width: 40px; height: 40px; } .slim_armor_mystery_201504 { background-image: url(spritesmith-main-4.png); - background-position: -1479px -182px; + background-position: -1473px -1092px; width: 90px; height: 90px; } .head_mystery_201505 { background-image: url(spritesmith-main-4.png); - background-position: -1479px -273px; + background-position: -1473px -1183px; width: 90px; height: 90px; } .shop_head_mystery_201505 { background-image: url(spritesmith-main-4.png); - background-position: -688px -617px; + background-position: -451px -1486px; width: 40px; height: 40px; } .shop_weapon_mystery_201505 { background-image: url(spritesmith-main-4.png); - background-position: -688px -576px; + background-position: -410px -1486px; width: 40px; height: 40px; } .weapon_mystery_201505 { background-image: url(spritesmith-main-4.png); - background-position: -1479px -546px; + background-position: -91px -1395px; width: 90px; height: 90px; } .broad_armor_mystery_201506 { background-image: url(spritesmith-main-4.png); - background-position: -91px -576px; + background-position: -560px -212px; width: 90px; height: 105px; } .eyewear_mystery_201506 { background-image: url(spritesmith-main-4.png); - background-position: 0px -576px; + background-position: -560px -106px; width: 90px; height: 105px; } .shop_armor_mystery_201506 { background-image: url(spritesmith-main-4.png); - background-position: -485px -420px; + background-position: -287px -1486px; width: 40px; height: 40px; } .shop_eyewear_mystery_201506 { background-image: url(spritesmith-main-4.png); - background-position: -485px -379px; + background-position: -246px -1486px; width: 40px; height: 40px; } .slim_armor_mystery_201506 { background-image: url(spritesmith-main-4.png); - background-position: -657px -424px; + background-position: -560px 0px; width: 90px; height: 105px; } .back_mystery_201507 { background-image: url(spritesmith-main-4.png); - background-position: -657px -318px; + background-position: -469px -106px; width: 90px; height: 105px; } .eyewear_mystery_201507 { background-image: url(spritesmith-main-4.png); - background-position: -657px -212px; + background-position: -469px 0px; width: 90px; height: 105px; } .shop_back_mystery_201507 { background-image: url(spritesmith-main-4.png); - background-position: -424px -329px; + background-position: -205px -1486px; width: 40px; height: 40px; } .shop_eyewear_mystery_201507 { background-image: url(spritesmith-main-4.png); - background-position: -475px -318px; + background-position: -82px -1486px; width: 40px; height: 40px; } .broad_armor_mystery_201508 { background-image: url(spritesmith-main-4.png); - background-position: -188px -682px; + background-position: -742px 0px; width: 93px; height: 90px; } .head_mystery_201508 { background-image: url(spritesmith-main-4.png); - background-position: -282px -682px; + background-position: -742px -91px; width: 93px; height: 90px; } .shop_armor_mystery_201508 { background-image: url(spritesmith-main-4.png); - background-position: -607px -424px; + background-position: -41px -1486px; width: 40px; height: 40px; } .shop_head_mystery_201508 { background-image: url(spritesmith-main-4.png); - background-position: -566px -424px; + background-position: 0px -1486px; width: 40px; height: 40px; } .slim_armor_mystery_201508 { background-image: url(spritesmith-main-4.png); - background-position: -376px -682px; + background-position: -742px -273px; width: 93px; height: 90px; } .broad_armor_mystery_201509 { background-image: url(spritesmith-main-4.png); - background-position: -546px -1410px; + background-position: -1456px -1395px; width: 90px; height: 90px; } .head_mystery_201509 { background-image: url(spritesmith-main-4.png); - background-position: -637px -1410px; + background-position: -1564px 0px; width: 90px; height: 90px; } .shop_armor_mystery_201509 { background-image: url(spritesmith-main-4.png); - background-position: -698px -530px; + background-position: -699px -576px; width: 40px; height: 40px; } .shop_head_mystery_201509 { background-image: url(spritesmith-main-4.png); - background-position: -839px -728px; + background-position: -658px -576px; width: 40px; height: 40px; } .slim_armor_mystery_201509 { background-image: url(spritesmith-main-4.png); - background-position: -910px -1410px; + background-position: -1564px -273px; width: 90px; height: 90px; } .back_mystery_201510 { background-image: url(spritesmith-main-4.png); - background-position: 0px -288px; + background-position: -212px -288px; width: 105px; height: 90px; } .headAccessory_mystery_201510 { background-image: url(spritesmith-main-4.png); - background-position: -658px -682px; + background-position: -742px -455px; width: 93px; height: 90px; } .shop_back_mystery_201510 { background-image: url(spritesmith-main-4.png); - background-position: -974px -819px; + background-position: -424px -329px; width: 40px; height: 40px; } .shop_headAccessory_mystery_201510 { background-image: url(spritesmith-main-4.png); - background-position: -933px -819px; + background-position: -424px -288px; width: 40px; height: 40px; } .broad_armor_mystery_201511 { background-image: url(spritesmith-main-4.png); - background-position: -1365px -1410px; + background-position: -1564px -728px; width: 90px; height: 90px; } .head_mystery_201511 { background-image: url(spritesmith-main-4.png); - background-position: -1456px -1410px; + background-position: -1564px -819px; width: 90px; height: 90px; } .shop_armor_mystery_201511 { background-image: url(spritesmith-main-4.png); - background-position: -1613px -1456px; + background-position: -603px -424px; width: 42px; height: 42px; } .shop_head_mystery_201511 { background-image: url(spritesmith-main-4.png); - background-position: -1570px -1456px; + background-position: -560px -424px; width: 42px; height: 42px; } .slim_armor_mystery_201511 { background-image: url(spritesmith-main-4.png); - background-position: -1570px -182px; + background-position: -1564px -1092px; width: 90px; height: 90px; } .broad_armor_mystery_201512 { background-image: url(spritesmith-main-4.png); - background-position: -1570px -273px; + background-position: -1564px -1183px; width: 90px; height: 90px; } .head_mystery_201512 { background-image: url(spritesmith-main-4.png); - background-position: -1570px -364px; + background-position: -1564px -1274px; width: 90px; height: 90px; } .shop_armor_mystery_201512 { background-image: url(spritesmith-main-4.png); - background-position: -1247px -1092px; + background-position: -1558px -1527px; width: 40px; height: 40px; } .shop_head_mystery_201512 { background-image: url(spritesmith-main-4.png); - background-position: -1297px -1183px; + background-position: -510px -318px; width: 40px; height: 40px; } .slim_armor_mystery_201512 { background-image: url(spritesmith-main-4.png); - background-position: -1570px -637px; + background-position: -1564px -1365px; width: 90px; height: 90px; } .head_mystery_201601 { background-image: url(spritesmith-main-4.png); - background-position: 0px -91px; + background-position: -121px 0px; width: 120px; height: 90px; } .shield_mystery_201601 { background-image: url(spritesmith-main-4.png); - background-position: -121px 0px; + background-position: 0px -91px; width: 120px; height: 90px; } .shop_head_mystery_201601 { background-image: url(spritesmith-main-4.png); - background-position: -1429px -1274px; + background-position: -300px -182px; width: 40px; height: 40px; } .shop_shield_mystery_201601 { background-image: url(spritesmith-main-4.png); - background-position: -1388px -1274px; + background-position: -300px -223px; width: 40px; height: 40px; } .back_mystery_201602 { background-image: url(spritesmith-main-4.png); - background-position: -1570px -1092px; + background-position: -1564px -637px; width: 90px; height: 90px; } .head_mystery_201602 { background-image: url(spritesmith-main-4.png); - background-position: -1570px -1183px; + background-position: -1564px -546px; width: 90px; height: 90px; } .shop_back_mystery_201602 { background-image: url(spritesmith-main-4.png); - background-position: -615px -1542px; + background-position: -597px -470px; width: 40px; height: 40px; } .shop_head_mystery_201602 { background-image: url(spritesmith-main-4.png); - background-position: -1115px -1001px; + background-position: -597px -511px; width: 40px; height: 40px; } .broad_armor_mystery_201603 { background-image: url(spritesmith-main-4.png); - background-position: -1570px -1365px; + background-position: -1564px -182px; width: 90px; height: 90px; } .head_mystery_201603 { background-image: url(spritesmith-main-4.png); - background-position: -1570px -1274px; + background-position: -1564px -91px; width: 90px; height: 90px; } .shop_armor_mystery_201603 { background-image: url(spritesmith-main-4.png); - background-position: -1156px -1001px; + background-position: -658px -617px; width: 40px; height: 40px; } .shop_head_mystery_201603 { background-image: url(spritesmith-main-4.png); - background-position: -1520px -1365px; + background-position: -699px -617px; width: 40px; height: 40px; } .slim_armor_mystery_201603 { background-image: url(spritesmith-main-4.png); - background-position: -1570px -1001px; + background-position: -1274px -1395px; width: 90px; height: 90px; } .broad_armor_mystery_201604 { background-image: url(spritesmith-main-4.png); - background-position: -839px -455px; + background-position: -742px -182px; width: 93px; height: 90px; } .head_mystery_201604 { background-image: url(spritesmith-main-4.png); - background-position: -839px -182px; + background-position: -564px -576px; width: 93px; height: 90px; } .shop_armor_mystery_201604 { background-image: url(spritesmith-main-4.png); - background-position: -1338px -1183px; + background-position: -123px -1486px; width: 40px; height: 40px; } .shop_head_mystery_201604 { background-image: url(spritesmith-main-4.png); - background-position: -1206px -1092px; + background-position: -164px -1486px; width: 40px; height: 40px; } .slim_armor_mystery_201604 { background-image: url(spritesmith-main-4.png); - background-position: -839px -91px; + background-position: -470px -576px; width: 93px; height: 90px; } .broad_armor_mystery_201605 { background-image: url(spritesmith-main-4.png); - background-position: -1570px -91px; + background-position: -455px -1395px; width: 90px; height: 90px; } .head_mystery_201605 { background-image: url(spritesmith-main-4.png); - background-position: -1570px 0px; + background-position: -364px -1395px; width: 90px; height: 90px; } .shop_armor_mystery_201605 { background-image: url(spritesmith-main-4.png); - background-position: -1024px -910px; + background-position: -328px -1486px; width: 40px; height: 40px; } .shop_head_mystery_201605 { background-image: url(spritesmith-main-4.png); - background-position: -1065px -910px; + background-position: -369px -1486px; width: 40px; height: 40px; } .slim_armor_mystery_201605 { background-image: url(spritesmith-main-4.png); - background-position: -1274px -1410px; + background-position: 0px -1395px; width: 90px; height: 90px; } .broad_armor_mystery_201606 { background-image: url(spritesmith-main-4.png); - background-position: -566px 0px; + background-position: -560px -318px; width: 90px; height: 105px; } .head_mystery_201606 { background-image: url(spritesmith-main-4.png); - background-position: -819px -1410px; + background-position: -1473px -1001px; width: 90px; height: 90px; } .shop_armor_mystery_201606 { background-image: url(spritesmith-main-4.png); - background-position: -880px -728px; + background-position: -533px -1486px; width: 40px; height: 40px; } .shop_head_mystery_201606 { background-image: url(spritesmith-main-4.png); - background-position: -657px -530px; + background-position: -574px -1486px; width: 40px; height: 40px; } .slim_armor_mystery_201606 { background-image: url(spritesmith-main-4.png); - background-position: -566px -318px; + background-position: 0px -470px; width: 90px; height: 105px; } +.broad_armor_mystery_201607 { + background-image: url(spritesmith-main-4.png); + background-position: -1473px -546px; + width: 90px; + height: 90px; +} +.head_mystery_201607 { + background-image: url(spritesmith-main-4.png); + background-position: -1473px -455px; + width: 90px; + height: 90px; +} +.shop_armor_mystery_201607 { + background-image: url(spritesmith-main-4.png); + background-position: -738px -1486px; + width: 40px; + height: 40px; +} +.shop_head_mystery_201607 { + background-image: url(spritesmith-main-4.png); + background-position: -779px -1486px; + width: 40px; + height: 40px; +} +.slim_armor_mystery_201607 { + background-image: url(spritesmith-main-4.png); + background-position: -1473px 0px; + width: 90px; + height: 90px; +} .broad_armor_mystery_301404 { background-image: url(spritesmith-main-4.png); - background-position: -364px -1410px; + background-position: -1183px -1304px; width: 90px; height: 90px; } .eyewear_mystery_301404 { background-image: url(spritesmith-main-4.png); - background-position: -273px -1410px; + background-position: -1092px -1304px; width: 90px; height: 90px; } .head_mystery_301404 { background-image: url(spritesmith-main-4.png); - background-position: 0px -1410px; + background-position: -728px -1304px; width: 90px; height: 90px; } .shop_armor_mystery_301404 { background-image: url(spritesmith-main-4.png); - background-position: -516px -318px; + background-position: -984px -1486px; width: 40px; height: 40px; } .shop_eyewear_mystery_301404 { background-image: url(spritesmith-main-4.png); - background-position: -318px -182px; + background-position: -1025px -1486px; width: 40px; height: 40px; } .shop_head_mystery_301404 { background-image: url(spritesmith-main-4.png); - background-position: -318px -223px; + background-position: -1066px -1486px; width: 40px; height: 40px; } .shop_weapon_mystery_301404 { background-image: url(spritesmith-main-4.png); - background-position: -424px -288px; + background-position: -1107px -1486px; width: 40px; height: 40px; } .slim_armor_mystery_301404 { background-image: url(spritesmith-main-4.png); - background-position: -1479px -1274px; + background-position: -637px -1304px; width: 90px; height: 90px; } .weapon_mystery_301404 { background-image: url(spritesmith-main-4.png); - background-position: -1479px -910px; + background-position: -273px -1304px; width: 90px; height: 90px; } .eyewear_mystery_301405 { background-image: url(spritesmith-main-4.png); - background-position: -1479px -819px; + background-position: -182px -1304px; width: 90px; height: 90px; } .headAccessory_mystery_301405 { background-image: url(spritesmith-main-4.png); - background-position: -1479px -364px; + background-position: -1382px -1092px; width: 90px; height: 90px; } .head_mystery_301405 { background-image: url(spritesmith-main-4.png); - background-position: -1479px -455px; + background-position: -1382px -1183px; width: 90px; height: 90px; } .shield_mystery_301405 { background-image: url(spritesmith-main-4.png); - background-position: -1479px 0px; + background-position: -1382px -728px; width: 90px; height: 90px; } .shop_eyewear_mystery_301405 { background-image: url(spritesmith-main-4.png); - background-position: -793px -682px; + background-position: -1394px -1486px; width: 40px; height: 40px; } .shop_headAccessory_mystery_301405 { background-image: url(spritesmith-main-4.png); - background-position: -793px -723px; + background-position: -1476px -1486px; width: 40px; height: 40px; } .shop_head_mystery_301405 { background-image: url(spritesmith-main-4.png); - background-position: -752px -723px; + background-position: -1435px -1486px; width: 40px; height: 40px; } .shop_shield_mystery_301405 { background-image: url(spritesmith-main-4.png); - background-position: 0px -1501px; + background-position: -1517px -1486px; width: 40px; height: 40px; } .broad_armor_special_spring2015Healer { background-image: url(spritesmith-main-4.png); - background-position: -1092px -1319px; + background-position: -1382px -637px; width: 90px; height: 90px; } .broad_armor_special_spring2015Mage { background-image: url(spritesmith-main-4.png); - background-position: -1001px -1319px; + background-position: -1382px -273px; width: 90px; height: 90px; } .broad_armor_special_spring2015Rogue { background-image: url(spritesmith-main-4.png); - background-position: -637px -1319px; + background-position: -1382px -182px; width: 90px; height: 90px; } .broad_armor_special_spring2015Warrior { background-image: url(spritesmith-main-4.png); - background-position: -546px -1319px; + background-position: -1183px -1213px; width: 90px; height: 90px; } .broad_armor_special_spring2016Healer { background-image: url(spritesmith-main-4.png); - background-position: -273px -1319px; + background-position: -1092px -1213px; width: 90px; height: 90px; } .broad_armor_special_spring2016Mage { background-image: url(spritesmith-main-4.png); - background-position: -182px -1319px; + background-position: -728px -1213px; width: 90px; height: 90px; } .broad_armor_special_spring2016Rogue { background-image: url(spritesmith-main-4.png); - background-position: -491px -576px; + background-position: -424px -379px; width: 102px; height: 90px; } .broad_armor_special_spring2016Warrior { background-image: url(spritesmith-main-4.png); - background-position: -1388px -1001px; + background-position: -273px -1213px; width: 90px; height: 90px; } .broad_armor_special_springHealer { background-image: url(spritesmith-main-4.png); - background-position: -1388px -637px; + background-position: -182px -1213px; width: 90px; height: 90px; } .broad_armor_special_springMage { background-image: url(spritesmith-main-4.png); - background-position: -1388px -546px; + background-position: -1291px -1092px; width: 90px; height: 90px; } .broad_armor_special_springRogue { background-image: url(spritesmith-main-4.png); - background-position: -1388px -273px; + background-position: -1291px -1001px; width: 90px; height: 90px; } .broad_armor_special_springWarrior { background-image: url(spritesmith-main-4.png); - background-position: -1388px -182px; + background-position: -1291px -637px; width: 90px; height: 90px; } .headAccessory_special_spring2015Healer { background-image: url(spritesmith-main-4.png); - background-position: -1001px -1137px; + background-position: -728px -1031px; width: 90px; height: 90px; } .headAccessory_special_spring2015Mage { background-image: url(spritesmith-main-4.png); - background-position: -910px -1137px; + background-position: -637px -1031px; width: 90px; height: 90px; } .headAccessory_special_spring2015Rogue { background-image: url(spritesmith-main-4.png); - background-position: -546px -1137px; + background-position: -546px -1031px; width: 90px; height: 90px; } .headAccessory_special_spring2015Warrior { background-image: url(spritesmith-main-4.png); - background-position: -455px -1137px; + background-position: -455px -1031px; width: 90px; height: 90px; } .headAccessory_special_spring2016Healer { background-image: url(spritesmith-main-4.png); - background-position: -364px -1137px; + background-position: -364px -1031px; width: 90px; height: 90px; } .headAccessory_special_spring2016Mage { background-image: url(spritesmith-main-4.png); - background-position: -1206px -1001px; + background-position: -273px -1031px; width: 90px; height: 90px; } .headAccessory_special_spring2016Rogue { background-image: url(spritesmith-main-4.png); - background-position: -388px -576px; + background-position: -297px -470px; width: 102px; height: 90px; } .headAccessory_special_spring2016Warrior { background-image: url(spritesmith-main-4.png); - background-position: -364px -1046px; + background-position: -91px -1031px; width: 90px; height: 90px; } .headAccessory_special_springHealer { background-image: url(spritesmith-main-4.png); - background-position: -273px -1046px; + background-position: 0px -1031px; width: 90px; height: 90px; } .headAccessory_special_springMage { background-image: url(spritesmith-main-4.png); - background-position: -182px -1046px; + background-position: -1109px -910px; width: 90px; height: 90px; } .headAccessory_special_springRogue { background-image: url(spritesmith-main-4.png); - background-position: -91px -1046px; + background-position: -1109px -819px; width: 90px; height: 90px; } .headAccessory_special_springWarrior { background-image: url(spritesmith-main-4.png); - background-position: 0px -1046px; + background-position: -1109px -728px; width: 90px; height: 90px; } .head_special_spring2015Healer { background-image: url(spritesmith-main-4.png); - background-position: -1183px -1228px; + background-position: -1291px -546px; width: 90px; height: 90px; } .head_special_spring2015Mage { background-image: url(spritesmith-main-4.png); - background-position: -1092px -1228px; + background-position: -1291px -182px; width: 90px; height: 90px; } .head_special_spring2015Rogue { background-image: url(spritesmith-main-4.png); - background-position: -728px -1228px; + background-position: -1291px -91px; width: 90px; height: 90px; } .head_special_spring2015Warrior { background-image: url(spritesmith-main-4.png); - background-position: -637px -1228px; + background-position: -1291px 0px; width: 90px; height: 90px; } .head_special_spring2016Healer { background-image: url(spritesmith-main-4.png); - background-position: -273px -1228px; + background-position: -819px -1122px; width: 90px; height: 90px; } .head_special_spring2016Mage { background-image: url(spritesmith-main-4.png); - background-position: -182px -1228px; + background-position: -728px -1122px; width: 90px; height: 90px; } .head_special_spring2016Rogue { background-image: url(spritesmith-main-4.png); - background-position: -530px -485px; + background-position: -194px -470px; width: 102px; height: 90px; } .head_special_spring2016Warrior { background-image: url(spritesmith-main-4.png); - background-position: -1297px -910px; + background-position: -1200px 0px; width: 90px; height: 90px; } .head_special_springHealer { background-image: url(spritesmith-main-4.png); - background-position: -1297px -546px; + background-position: -1092px -1031px; width: 90px; height: 90px; } .head_special_springMage { background-image: url(spritesmith-main-4.png); - background-position: -1297px -455px; + background-position: -1001px -1031px; width: 90px; height: 90px; } .head_special_springRogue { background-image: url(spritesmith-main-4.png); - background-position: -1297px -182px; + background-position: -910px -1031px; width: 90px; height: 90px; } .head_special_springWarrior { background-image: url(spritesmith-main-4.png); - background-position: -1297px -91px; + background-position: -819px -1031px; width: 90px; height: 90px; } .shield_special_spring2015Healer { background-image: url(spritesmith-main-4.png); - background-position: -1115px -910px; + background-position: -1109px -637px; width: 90px; height: 90px; } .shield_special_spring2015Rogue { background-image: url(spritesmith-main-4.png); - background-position: -1115px -819px; + background-position: -1109px -546px; width: 90px; height: 90px; } .shield_special_spring2015Warrior { background-image: url(spritesmith-main-4.png); - background-position: -1115px -728px; + background-position: -1109px -455px; width: 90px; height: 90px; } .shield_special_spring2016Healer { background-image: url(spritesmith-main-4.png); - background-position: -1115px -637px; + background-position: -1109px -364px; width: 90px; height: 90px; } .shield_special_spring2016Rogue { background-image: url(spritesmith-main-4.png); - background-position: -182px -576px; + background-position: -400px -470px; width: 102px; height: 90px; } .shield_special_spring2016Warrior { background-image: url(spritesmith-main-4.png); - background-position: -1115px -455px; + background-position: -1109px -182px; width: 90px; height: 90px; } .shield_special_springHealer { background-image: url(spritesmith-main-4.png); - background-position: -1115px -364px; + background-position: -1109px -91px; width: 90px; height: 90px; } .shield_special_springRogue { background-image: url(spritesmith-main-4.png); - background-position: -1115px -273px; + background-position: -1109px 0px; width: 90px; height: 90px; } .shield_special_springWarrior { background-image: url(spritesmith-main-4.png); - background-position: -1115px -182px; + background-position: -1001px -940px; width: 90px; height: 90px; } .shop_armor_special_spring2015Healer { background-image: url(spritesmith-main-4.png); - background-position: -246px -1542px; + background-position: -123px -1568px; width: 40px; height: 40px; } .shop_armor_special_spring2015Mage { background-image: url(spritesmith-main-4.png); - background-position: -287px -1542px; + background-position: -164px -1568px; width: 40px; height: 40px; } .shop_armor_special_spring2015Rogue { background-image: url(spritesmith-main-4.png); - background-position: -328px -1542px; + background-position: -205px -1568px; width: 40px; height: 40px; } .shop_armor_special_spring2015Warrior { background-image: url(spritesmith-main-4.png); - background-position: -369px -1542px; + background-position: -246px -1568px; width: 40px; height: 40px; } .shop_armor_special_spring2016Healer { background-image: url(spritesmith-main-4.png); - background-position: -410px -1542px; + background-position: -287px -1568px; width: 40px; height: 40px; } .shop_armor_special_spring2016Mage { background-image: url(spritesmith-main-4.png); - background-position: -451px -1542px; + background-position: -328px -1568px; width: 40px; height: 40px; } .shop_armor_special_spring2016Rogue { background-image: url(spritesmith-main-4.png); - background-position: -492px -1542px; + background-position: -369px -1568px; width: 40px; height: 40px; } .shop_armor_special_spring2016Warrior { background-image: url(spritesmith-main-4.png); - background-position: -533px -1542px; + background-position: -410px -1568px; width: 40px; height: 40px; } .shop_armor_special_springHealer { background-image: url(spritesmith-main-4.png); - background-position: -574px -1542px; + background-position: -451px -1568px; width: 40px; height: 40px; } .shop_armor_special_springMage { background-image: url(spritesmith-main-4.png); - background-position: -1479px -1365px; + background-position: -492px -1568px; width: 40px; height: 40px; } .shop_armor_special_springRogue { background-image: url(spritesmith-main-4.png); - background-position: -656px -1542px; + background-position: -533px -1568px; width: 40px; height: 40px; } .shop_armor_special_springWarrior { background-image: url(spritesmith-main-4.png); - background-position: -697px -1542px; + background-position: -574px -1568px; width: 40px; height: 40px; } .shop_headAccessory_special_spring2015Healer { background-image: url(spritesmith-main-4.png); - background-position: -1230px -1542px; + background-position: -1107px -1568px; width: 40px; height: 40px; } .shop_headAccessory_special_spring2015Mage { background-image: url(spritesmith-main-4.png); - background-position: -1271px -1542px; + background-position: -1148px -1568px; width: 40px; height: 40px; } .shop_headAccessory_special_spring2015Rogue { background-image: url(spritesmith-main-4.png); - background-position: -1312px -1542px; + background-position: -1189px -1568px; width: 40px; height: 40px; } .shop_headAccessory_special_spring2015Warrior { background-image: url(spritesmith-main-4.png); - background-position: -1353px -1542px; + background-position: -1230px -1568px; width: 40px; height: 40px; } .shop_headAccessory_special_spring2016Healer { background-image: url(spritesmith-main-4.png); - background-position: -1394px -1542px; + background-position: -1271px -1568px; width: 40px; height: 40px; } .shop_headAccessory_special_spring2016Mage { background-image: url(spritesmith-main-4.png); - background-position: -1435px -1542px; + background-position: -1312px -1568px; width: 40px; height: 40px; } .shop_headAccessory_special_spring2016Rogue { background-image: url(spritesmith-main-4.png); - background-position: -1476px -1542px; + background-position: -1353px -1568px; width: 40px; height: 40px; } .shop_headAccessory_special_spring2016Warrior { background-image: url(spritesmith-main-4.png); - background-position: -1517px -1542px; + background-position: -1394px -1568px; width: 40px; height: 40px; } .shop_headAccessory_special_springHealer { background-image: url(spritesmith-main-4.png); - background-position: -1558px -1542px; + background-position: -1435px -1568px; width: 40px; height: 40px; } .shop_headAccessory_special_springMage { background-image: url(spritesmith-main-4.png); - background-position: -1599px -1542px; + background-position: -1476px -1568px; width: 40px; height: 40px; } .shop_headAccessory_special_springRogue { background-image: url(spritesmith-main-4.png); - background-position: 0px -1583px; + background-position: -1517px -1568px; width: 40px; height: 40px; } .shop_headAccessory_special_springWarrior { background-image: url(spritesmith-main-4.png); - background-position: -41px -1583px; + background-position: -1558px -1568px; width: 40px; height: 40px; } .shop_head_special_spring2015Healer { background-image: url(spritesmith-main-4.png); - background-position: -738px -1542px; + background-position: -615px -1568px; width: 40px; height: 40px; } .shop_head_special_spring2015Mage { background-image: url(spritesmith-main-4.png); - background-position: -779px -1542px; + background-position: -656px -1568px; width: 40px; height: 40px; } .shop_head_special_spring2015Rogue { background-image: url(spritesmith-main-4.png); - background-position: -820px -1542px; + background-position: -697px -1568px; width: 40px; height: 40px; } .shop_head_special_spring2015Warrior { background-image: url(spritesmith-main-4.png); - background-position: -861px -1542px; + background-position: -738px -1568px; width: 40px; height: 40px; } .shop_head_special_spring2016Healer { background-image: url(spritesmith-main-4.png); - background-position: -902px -1542px; + background-position: -779px -1568px; width: 40px; height: 40px; } .shop_head_special_spring2016Mage { background-image: url(spritesmith-main-4.png); - background-position: -943px -1542px; + background-position: -820px -1568px; width: 40px; height: 40px; } .shop_head_special_spring2016Rogue { background-image: url(spritesmith-main-4.png); - background-position: -984px -1542px; + background-position: -861px -1568px; width: 40px; height: 40px; } .shop_head_special_spring2016Warrior { background-image: url(spritesmith-main-4.png); - background-position: -1025px -1542px; + background-position: -902px -1568px; width: 40px; height: 40px; } .shop_head_special_springHealer { background-image: url(spritesmith-main-4.png); - background-position: -1066px -1542px; + background-position: -943px -1568px; width: 40px; height: 40px; } .shop_head_special_springMage { background-image: url(spritesmith-main-4.png); - background-position: -1107px -1542px; + background-position: -984px -1568px; width: 40px; height: 40px; } .shop_head_special_springRogue { background-image: url(spritesmith-main-4.png); - background-position: -1148px -1542px; + background-position: -1025px -1568px; width: 40px; height: 40px; } .shop_head_special_springWarrior { background-image: url(spritesmith-main-4.png); - background-position: -1189px -1542px; + background-position: -1066px -1568px; width: 40px; height: 40px; } .shop_shield_special_spring2015Healer { background-image: url(spritesmith-main-4.png); - background-position: -82px -1583px; + background-position: -1599px -1568px; width: 40px; height: 40px; } .shop_shield_special_spring2015Rogue { background-image: url(spritesmith-main-4.png); - background-position: -123px -1583px; + background-position: 0px -1609px; width: 40px; height: 40px; } .shop_shield_special_spring2015Warrior { background-image: url(spritesmith-main-4.png); - background-position: -164px -1583px; + background-position: -41px -1609px; width: 40px; height: 40px; } .shop_shield_special_spring2016Healer { background-image: url(spritesmith-main-4.png); - background-position: -205px -1583px; + background-position: -82px -1609px; width: 40px; height: 40px; } .shop_shield_special_spring2016Rogue { background-image: url(spritesmith-main-4.png); - background-position: -246px -1583px; + background-position: -123px -1609px; width: 40px; height: 40px; } .shop_shield_special_spring2016Warrior { background-image: url(spritesmith-main-4.png); - background-position: -287px -1583px; + background-position: -164px -1609px; width: 40px; height: 40px; } .shop_shield_special_springHealer { background-image: url(spritesmith-main-4.png); - background-position: -328px -1583px; + background-position: -205px -1609px; width: 40px; height: 40px; } .shop_shield_special_springRogue { background-image: url(spritesmith-main-4.png); - background-position: -369px -1583px; + background-position: -246px -1609px; width: 40px; height: 40px; } .shop_shield_special_springWarrior { background-image: url(spritesmith-main-4.png); - background-position: -410px -1583px; + background-position: -287px -1609px; width: 40px; height: 40px; } .shop_weapon_special_spring2015Healer { background-image: url(spritesmith-main-4.png); - background-position: -451px -1583px; + background-position: -328px -1609px; width: 40px; height: 40px; } .shop_weapon_special_spring2015Mage { background-image: url(spritesmith-main-4.png); - background-position: -492px -1583px; + background-position: -369px -1609px; width: 40px; height: 40px; } .shop_weapon_special_spring2015Rogue { background-image: url(spritesmith-main-4.png); - background-position: -533px -1583px; + background-position: -410px -1609px; width: 40px; height: 40px; } .shop_weapon_special_spring2015Warrior { background-image: url(spritesmith-main-4.png); - background-position: -574px -1583px; + background-position: -451px -1609px; width: 40px; height: 40px; } .shop_weapon_special_spring2016Healer { background-image: url(spritesmith-main-4.png); - background-position: -615px -1583px; + background-position: -492px -1609px; width: 40px; height: 40px; } .shop_weapon_special_spring2016Mage { background-image: url(spritesmith-main-4.png); - background-position: -656px -1583px; + background-position: -533px -1609px; width: 40px; height: 40px; } .shop_weapon_special_spring2016Rogue { background-image: url(spritesmith-main-4.png); - background-position: -697px -1583px; + background-position: -574px -1609px; width: 40px; height: 40px; } .shop_weapon_special_spring2016Warrior { background-image: url(spritesmith-main-4.png); - background-position: -738px -1583px; + background-position: -615px -1609px; width: 40px; height: 40px; } .shop_weapon_special_springHealer { background-image: url(spritesmith-main-4.png); - background-position: -779px -1583px; + background-position: -656px -1609px; width: 40px; height: 40px; } .shop_weapon_special_springMage { background-image: url(spritesmith-main-4.png); - background-position: -820px -1583px; + background-position: -697px -1609px; width: 40px; height: 40px; } .shop_weapon_special_springRogue { background-image: url(spritesmith-main-4.png); - background-position: -861px -1583px; + background-position: -738px -1609px; width: 40px; height: 40px; } .shop_weapon_special_springWarrior { background-image: url(spritesmith-main-4.png); - background-position: -902px -1583px; + background-position: -779px -1609px; width: 40px; height: 40px; } .slim_armor_special_spring2015Healer { background-image: url(spritesmith-main-4.png); - background-position: -1115px -91px; + background-position: -910px -940px; width: 90px; height: 90px; } .slim_armor_special_spring2015Mage { background-image: url(spritesmith-main-4.png); - background-position: -1115px 0px; + background-position: -819px -940px; width: 90px; height: 90px; } .slim_armor_special_spring2015Rogue { background-image: url(spritesmith-main-4.png); - background-position: -1001px -955px; + background-position: -728px -940px; width: 90px; height: 90px; } .slim_armor_special_spring2015Warrior { background-image: url(spritesmith-main-4.png); - background-position: -910px -955px; + background-position: -273px -849px; width: 90px; height: 90px; } .slim_armor_special_spring2016Healer { background-image: url(spritesmith-main-4.png); - background-position: -819px -955px; + background-position: -182px -849px; width: 90px; height: 90px; } .slim_armor_special_spring2016Mage { background-image: url(spritesmith-main-4.png); - background-position: -728px -955px; + background-position: -91px -849px; width: 90px; height: 90px; } .slim_armor_special_spring2016Rogue { background-image: url(spritesmith-main-4.png); - background-position: -637px -955px; + background-position: -836px -182px; width: 90px; height: 90px; } .slim_armor_special_spring2016Warrior { background-image: url(spritesmith-main-4.png); - background-position: -546px -955px; + background-position: -836px -91px; width: 90px; height: 90px; } .slim_armor_special_springHealer { background-image: url(spritesmith-main-4.png); - background-position: -455px -955px; + background-position: -836px 0px; width: 90px; height: 90px; } .slim_armor_special_springMage { background-image: url(spritesmith-main-4.png); - background-position: -364px -955px; + background-position: -728px -667px; width: 90px; height: 90px; } .slim_armor_special_springRogue { background-image: url(spritesmith-main-4.png); - background-position: -273px -955px; + background-position: -637px -667px; width: 90px; height: 90px; } .slim_armor_special_springWarrior { background-image: url(spritesmith-main-4.png); - background-position: -182px -955px; + background-position: -546px -667px; width: 90px; height: 90px; } .weapon_special_spring2015Healer { background-image: url(spritesmith-main-4.png); - background-position: -91px -955px; + background-position: -455px -667px; width: 90px; height: 90px; } .weapon_special_spring2015Mage { background-image: url(spritesmith-main-4.png); - background-position: 0px -955px; + background-position: -364px -667px; width: 90px; height: 90px; } .weapon_special_spring2015Rogue { background-image: url(spritesmith-main-4.png); - background-position: -1024px -819px; + background-position: -273px -667px; width: 90px; height: 90px; } .weapon_special_spring2015Warrior { background-image: url(spritesmith-main-4.png); - background-position: -1024px -728px; + background-position: -182px -667px; width: 90px; height: 90px; } .weapon_special_spring2016Healer { background-image: url(spritesmith-main-4.png); - background-position: -933px -182px; + background-position: -91px -667px; width: 90px; height: 90px; } .weapon_special_spring2016Mage { background-image: url(spritesmith-main-4.png); - background-position: -933px -91px; + background-position: 0px -667px; width: 90px; height: 90px; } .weapon_special_spring2016Rogue { background-image: url(spritesmith-main-4.png); - background-position: -285px -576px; + background-position: -91px -470px; width: 102px; height: 90px; } .weapon_special_spring2016Warrior { background-image: url(spritesmith-main-4.png); - background-position: -455px -1410px; + background-position: -651px -382px; width: 90px; height: 90px; } .weapon_special_springHealer { background-image: url(spritesmith-main-4.png); - background-position: -182px -1410px; + background-position: -1564px -1001px; width: 90px; height: 90px; } .weapon_special_springMage { background-image: url(spritesmith-main-4.png); - background-position: -91px -1410px; + background-position: -1564px -910px; width: 90px; height: 90px; } .weapon_special_springRogue { background-image: url(spritesmith-main-4.png); - background-position: -1479px -1183px; + background-position: -1564px -455px; width: 90px; height: 90px; } .weapon_special_springWarrior { background-image: url(spritesmith-main-4.png); - background-position: -1479px -1092px; + background-position: -1564px -364px; width: 90px; height: 90px; } .body_special_summer2015Healer { background-image: url(spritesmith-main-4.png); - background-position: -1479px -1001px; + background-position: -1365px -1395px; width: 90px; height: 90px; } .body_special_summer2015Mage { background-image: url(spritesmith-main-4.png); - background-position: -1479px -728px; + background-position: -1183px -1395px; width: 90px; height: 90px; } @@ -2658,103 +2760,25 @@ } .body_special_summer2015Warrior { background-image: url(spritesmith-main-4.png); - background-position: -566px -106px; + background-position: -469px -212px; width: 90px; height: 105px; } .body_special_summerHealer { background-image: url(spritesmith-main-4.png); - background-position: -657px -106px; + background-position: -363px -91px; width: 90px; height: 105px; } .body_special_summerMage { background-image: url(spritesmith-main-4.png); - background-position: -475px 0px; + background-position: -103px -182px; width: 90px; height: 105px; } .broad_armor_special_summer2015Healer { background-image: url(spritesmith-main-4.png); - background-position: -1388px 0px; + background-position: -819px -1395px; width: 90px; height: 90px; } -.broad_armor_special_summer2015Mage { - background-image: url(spritesmith-main-4.png); - background-position: -1297px -1092px; - width: 90px; - height: 90px; -} -.broad_armor_special_summer2015Rogue { - background-image: url(spritesmith-main-4.png); - background-position: -103px -182px; - width: 102px; - height: 105px; -} -.broad_armor_special_summer2015Warrior { - background-image: url(spritesmith-main-4.png); - background-position: -475px -106px; - width: 90px; - height: 105px; -} -.broad_armor_special_summer2016Healer { - background-image: url(spritesmith-main-4.png); - background-position: 0px -379px; - width: 90px; - height: 105px; -} -.broad_armor_special_summer2016Mage { - background-image: url(spritesmith-main-4.png); - background-position: -182px -379px; - width: 90px; - height: 105px; -} -.broad_armor_special_summer2016Rogue { - background-image: url(spritesmith-main-4.png); - background-position: -566px -212px; - width: 90px; - height: 105px; -} -.broad_armor_special_summer2016Warrior { - background-image: url(spritesmith-main-4.png); - background-position: -657px 0px; - width: 90px; - height: 105px; -} -.broad_armor_special_summerHealer { - background-image: url(spritesmith-main-4.png); - background-position: -91px -379px; - width: 90px; - height: 105px; -} -.broad_armor_special_summerMage { - background-image: url(spritesmith-main-4.png); - background-position: -475px -212px; - width: 90px; - height: 105px; -} -.broad_armor_special_summerRogue { - background-image: url(spritesmith-main-4.png); - background-position: -363px -91px; - width: 111px; - height: 90px; -} -.broad_armor_special_summerWarrior { - background-image: url(spritesmith-main-4.png); - background-position: -363px 0px; - width: 111px; - height: 90px; -} -.eyewear_special_summerRogue { - background-image: url(spritesmith-main-4.png); - background-position: -363px -182px; - width: 111px; - height: 90px; -} -.eyewear_special_summerWarrior { - background-image: url(spritesmith-main-4.png); - background-position: -206px -182px; - width: 111px; - height: 90px; -} diff --git a/common/dist/sprites/spritesmith-main-4.png b/common/dist/sprites/spritesmith-main-4.png index a885d48d83..483b4759db 100644 Binary files a/common/dist/sprites/spritesmith-main-4.png and b/common/dist/sprites/spritesmith-main-4.png differ diff --git a/common/dist/sprites/spritesmith-main-5.css b/common/dist/sprites/spritesmith-main-5.css index 2034ba8d27..49b3286666 100644 --- a/common/dist/sprites/spritesmith-main-5.css +++ b/common/dist/sprites/spritesmith-main-5.css @@ -1,3000 +1,3048 @@ +.broad_armor_special_summer2015Mage { + background-image: url(spritesmith-main-5.png); + background-position: -455px -960px; + width: 90px; + height: 90px; +} +.broad_armor_special_summer2015Rogue { + background-image: url(spritesmith-main-5.png); + background-position: -309px -387px; + width: 102px; + height: 105px; +} +.broad_armor_special_summer2015Warrior { + background-image: url(spritesmith-main-5.png); + background-position: -946px -106px; + width: 90px; + height: 105px; +} +.broad_armor_special_summer2016Healer { + background-image: url(spritesmith-main-5.png); + background-position: -273px -763px; + width: 90px; + height: 105px; +} +.broad_armor_special_summer2016Mage { + background-image: url(spritesmith-main-5.png); + background-position: -546px -763px; + width: 90px; + height: 105px; +} +.broad_armor_special_summer2016Rogue { + background-image: url(spritesmith-main-5.png); + background-position: -182px -763px; + width: 90px; + height: 105px; +} +.broad_armor_special_summer2016Warrior { + background-image: url(spritesmith-main-5.png); + background-position: -855px -636px; + width: 90px; + height: 105px; +} +.broad_armor_special_summerHealer { + background-image: url(spritesmith-main-5.png); + background-position: -855px -530px; + width: 90px; + height: 105px; +} +.broad_armor_special_summerMage { + background-image: url(spritesmith-main-5.png); + background-position: -819px -763px; + width: 90px; + height: 105px; +} +.broad_armor_special_summerRogue { + background-image: url(spritesmith-main-5.png); + background-position: -631px -455px; + width: 111px; + height: 90px; +} +.broad_armor_special_summerWarrior { + background-image: url(spritesmith-main-5.png); + background-position: -631px 0px; + width: 111px; + height: 90px; +} +.eyewear_special_summerRogue { + background-image: url(spritesmith-main-5.png); + background-position: -224px -584px; + width: 111px; + height: 90px; +} +.eyewear_special_summerWarrior { + background-image: url(spritesmith-main-5.png); + background-position: -631px -364px; + width: 111px; + height: 90px; +} .head_special_summer2015Healer { background-image: url(spritesmith-main-5.png); - background-position: -919px -944px; + background-position: -819px -960px; width: 90px; height: 90px; } .head_special_summer2015Mage { background-image: url(spritesmith-main-5.png); - background-position: -1459px -546px; + background-position: -273px -960px; width: 90px; height: 90px; } .head_special_summer2015Rogue { background-image: url(spritesmith-main-5.png); - background-position: -610px -318px; + background-position: -206px -387px; width: 102px; height: 105px; } .head_special_summer2015Warrior { background-image: url(spritesmith-main-5.png); - background-position: -546px -838px; + background-position: -637px -763px; width: 90px; height: 105px; } .head_special_summer2016Healer { background-image: url(spritesmith-main-5.png); - background-position: -1095px -637px; + background-position: -1001px -960px; width: 90px; height: 90px; } .head_special_summer2016Mage { background-image: url(spritesmith-main-5.png); - background-position: -1095px -728px; + background-position: -910px -1142px; width: 90px; height: 90px; } .head_special_summer2016Rogue { background-image: url(spritesmith-main-5.png); - background-position: -109px -429px; + background-position: -218px -278px; width: 108px; height: 108px; } .head_special_summer2016Warrior { background-image: url(spritesmith-main-5.png); - background-position: -1095px -91px; + background-position: -364px -960px; width: 90px; height: 90px; } .head_special_summerHealer { background-image: url(spritesmith-main-5.png); - background-position: -91px -838px; + background-position: -855px -212px; width: 90px; height: 105px; } .head_special_summerMage { background-image: url(spritesmith-main-5.png); - background-position: -273px -838px; + background-position: 0px -763px; width: 90px; height: 105px; } .head_special_summerRogue { background-image: url(spritesmith-main-5.png); - background-position: -457px -538px; + background-position: -345px -493px; width: 111px; height: 90px; } .head_special_summerWarrior { background-image: url(spritesmith-main-5.png); - background-position: -569px -538px; + background-position: -457px -493px; width: 111px; height: 90px; } .Healer_Summer { background-image: url(spritesmith-main-5.png); - background-position: -901px -212px; + background-position: -946px 0px; width: 90px; height: 105px; } .Mage_Summer { background-image: url(spritesmith-main-5.png); - background-position: -901px -530px; + background-position: -743px -491px; width: 90px; height: 105px; } .SummerRogue14 { background-image: url(spritesmith-main-5.png); - background-position: -309px -629px; + background-position: -631px -91px; width: 111px; height: 90px; } .SummerWarrior14 { background-image: url(spritesmith-main-5.png); - background-position: -345px -538px; + background-position: -631px -182px; width: 111px; height: 90px; } .shield_special_summer2015Healer { background-image: url(spritesmith-main-5.png); - background-position: -1095px -455px; + background-position: -910px -960px; width: 90px; height: 90px; } .shield_special_summer2015Rogue { background-image: url(spritesmith-main-5.png); - background-position: -610px 0px; + background-position: -103px -387px; width: 102px; height: 105px; } .shield_special_summer2015Warrior { background-image: url(spritesmith-main-5.png); - background-position: -901px 0px; + background-position: -728px -763px; width: 90px; height: 105px; } .shield_special_summer2016Healer { background-image: url(spritesmith-main-5.png); - background-position: -273px -1217px; + background-position: 0px -960px; width: 90px; height: 90px; } .shield_special_summer2016Rogue { background-image: url(spritesmith-main-5.png); - background-position: -326px -290px; + background-position: -109px -278px; width: 108px; height: 108px; } .shield_special_summer2016Warrior { background-image: url(spritesmith-main-5.png); - background-position: -610px -106px; + background-position: 0px -387px; width: 102px; height: 105px; } .shield_special_summerHealer { background-image: url(spritesmith-main-5.png); - background-position: -901px -424px; + background-position: -946px -212px; width: 90px; height: 105px; } .shield_special_summerRogue { background-image: url(spritesmith-main-5.png); - background-position: -789px 0px; + background-position: -336px -584px; width: 111px; height: 90px; } .shield_special_summerWarrior { background-image: url(spritesmith-main-5.png); - background-position: -421px -629px; + background-position: -448px -584px; width: 111px; height: 90px; } .shop_armor_special_summer2015Healer { background-image: url(spritesmith-main-5.png); - background-position: -984px -1624px; + background-position: -1668px -287px; width: 40px; height: 40px; } .shop_armor_special_summer2015Mage { background-image: url(spritesmith-main-5.png); - background-position: -1025px -1624px; + background-position: -1668px -328px; width: 40px; height: 40px; } .shop_armor_special_summer2015Rogue { background-image: url(spritesmith-main-5.png); - background-position: -1682px 0px; + background-position: -1668px -943px; width: 40px; height: 40px; } .shop_armor_special_summer2015Warrior { background-image: url(spritesmith-main-5.png); - background-position: -1682px -205px; + background-position: -1668px -984px; width: 40px; height: 40px; } .shop_armor_special_summer2016Healer { background-image: url(spritesmith-main-5.png); - background-position: -1682px -164px; + background-position: -1668px -902px; width: 40px; height: 40px; } .shop_armor_special_summer2016Mage { background-image: url(spritesmith-main-5.png); - background-position: -1682px -123px; + background-position: -1668px -820px; width: 40px; height: 40px; } .shop_armor_special_summer2016Rogue { background-image: url(spritesmith-main-5.png); - background-position: -1682px -82px; + background-position: -1668px -779px; width: 40px; height: 40px; } .shop_armor_special_summer2016Warrior { background-image: url(spritesmith-main-5.png); - background-position: -1682px -41px; + background-position: -1668px -656px; width: 40px; height: 40px; } .shop_armor_special_summerHealer { background-image: url(spritesmith-main-5.png); - background-position: -1640px -1624px; + background-position: -1668px -574px; width: 40px; height: 40px; } .shop_armor_special_summerMage { background-image: url(spritesmith-main-5.png); - background-position: -1599px -1624px; + background-position: -656px -1602px; width: 40px; height: 40px; } .shop_armor_special_summerRogue { background-image: url(spritesmith-main-5.png); - background-position: -1517px -1624px; + background-position: -574px -1602px; width: 40px; height: 40px; } .shop_armor_special_summerWarrior { background-image: url(spritesmith-main-5.png); - background-position: -1476px -1624px; + background-position: -533px -1602px; width: 40px; height: 40px; } .shop_body_special_summer2015Healer { background-image: url(spritesmith-main-5.png); - background-position: -1353px -1624px; + background-position: -492px -1602px; width: 40px; height: 40px; } .shop_body_special_summer2015Mage { background-image: url(spritesmith-main-5.png); - background-position: -1271px -1624px; + background-position: -451px -1602px; width: 40px; height: 40px; } .shop_body_special_summer2015Rogue { background-image: url(spritesmith-main-5.png); - background-position: -1641px -1312px; + background-position: -410px -1602px; width: 40px; height: 40px; } .shop_body_special_summer2015Warrior { background-image: url(spritesmith-main-5.png); - background-position: -1641px -1230px; + background-position: -369px -1602px; width: 40px; height: 40px; } .shop_body_special_summerHealer { background-image: url(spritesmith-main-5.png); - background-position: -1641px -1189px; + background-position: -328px -1602px; width: 40px; height: 40px; } .shop_body_special_summerMage { background-image: url(spritesmith-main-5.png); - background-position: -1641px -1148px; + background-position: -287px -1602px; width: 40px; height: 40px; } .shop_eyewear_special_summerRogue { background-image: url(spritesmith-main-5.png); - background-position: -1641px -1107px; + background-position: -246px -1602px; width: 40px; height: 40px; } .shop_eyewear_special_summerWarrior { background-image: url(spritesmith-main-5.png); - background-position: -1641px -1066px; + background-position: -205px -1602px; width: 40px; height: 40px; } .shop_head_special_summer2015Healer { background-image: url(spritesmith-main-5.png); - background-position: -1641px -1025px; + background-position: -164px -1602px; width: 40px; height: 40px; } .shop_head_special_summer2015Mage { background-image: url(spritesmith-main-5.png); - background-position: -1641px -984px; + background-position: -123px -1602px; width: 40px; height: 40px; } .shop_head_special_summer2015Rogue { background-image: url(spritesmith-main-5.png); - background-position: -1641px -943px; + background-position: -82px -1602px; width: 40px; height: 40px; } .shop_head_special_summer2015Warrior { background-image: url(spritesmith-main-5.png); - background-position: -1641px -902px; + background-position: -41px -1602px; width: 40px; height: 40px; } .shop_head_special_summer2016Healer { background-image: url(spritesmith-main-5.png); - background-position: -1641px -861px; + background-position: 0px -1602px; width: 40px; height: 40px; } .shop_head_special_summer2016Mage { background-image: url(spritesmith-main-5.png); - background-position: -1641px -820px; + background-position: -1627px -1558px; width: 40px; height: 40px; } .shop_head_special_summer2016Rogue { background-image: url(spritesmith-main-5.png); - background-position: -1641px -779px; + background-position: -1627px -1517px; width: 40px; height: 40px; } .shop_head_special_summer2016Warrior { background-image: url(spritesmith-main-5.png); - background-position: -1641px -738px; + background-position: -1627px -1476px; width: 40px; height: 40px; } .shop_head_special_summerHealer { background-image: url(spritesmith-main-5.png); - background-position: -1641px -697px; + background-position: -1627px -1435px; width: 40px; height: 40px; } .shop_head_special_summerMage { background-image: url(spritesmith-main-5.png); - background-position: -1641px -656px; + background-position: -1627px -1394px; width: 40px; height: 40px; } .shop_head_special_summerRogue { background-image: url(spritesmith-main-5.png); - background-position: -1641px -615px; + background-position: -1627px -1353px; width: 40px; height: 40px; } .shop_head_special_summerWarrior { background-image: url(spritesmith-main-5.png); - background-position: -1641px -574px; + background-position: -1627px -1312px; width: 40px; height: 40px; } .shop_shield_special_summer2015Healer { background-image: url(spritesmith-main-5.png); - background-position: -1641px -533px; + background-position: -1627px -1271px; width: 40px; height: 40px; } .shop_shield_special_summer2015Rogue { background-image: url(spritesmith-main-5.png); - background-position: -1641px -492px; + background-position: -1627px -1230px; width: 40px; height: 40px; } .shop_shield_special_summer2015Warrior { background-image: url(spritesmith-main-5.png); - background-position: -1641px -451px; + background-position: -1627px -1189px; width: 40px; height: 40px; } .shop_shield_special_summer2016Healer { background-image: url(spritesmith-main-5.png); - background-position: -1641px -410px; + background-position: -1627px -1148px; width: 40px; height: 40px; } .shop_shield_special_summer2016Rogue { background-image: url(spritesmith-main-5.png); - background-position: -1641px -369px; + background-position: -1627px -1107px; width: 40px; height: 40px; } .shop_shield_special_summer2016Warrior { background-image: url(spritesmith-main-5.png); - background-position: -1641px -328px; + background-position: -1627px -1066px; width: 40px; height: 40px; } .shop_shield_special_summerHealer { background-image: url(spritesmith-main-5.png); - background-position: -1641px -287px; + background-position: -1627px -1025px; width: 40px; height: 40px; } .shop_shield_special_summerRogue { background-image: url(spritesmith-main-5.png); - background-position: -1641px -246px; + background-position: -1627px -984px; width: 40px; height: 40px; } .shop_shield_special_summerWarrior { background-image: url(spritesmith-main-5.png); - background-position: -1641px -205px; + background-position: -1627px -943px; width: 40px; height: 40px; } .shop_weapon_special_summer2015Healer { background-image: url(spritesmith-main-5.png); - background-position: -1641px -164px; + background-position: -1627px -902px; width: 40px; height: 40px; } .shop_weapon_special_summer2015Mage { background-image: url(spritesmith-main-5.png); - background-position: -1641px -123px; + background-position: -1627px -861px; width: 40px; height: 40px; } .shop_weapon_special_summer2015Rogue { background-image: url(spritesmith-main-5.png); - background-position: -1641px -82px; + background-position: -1627px -820px; width: 40px; height: 40px; } .shop_weapon_special_summer2015Warrior { background-image: url(spritesmith-main-5.png); - background-position: -1641px -41px; + background-position: -1627px -779px; width: 40px; height: 40px; } .shop_weapon_special_summer2016Healer { background-image: url(spritesmith-main-5.png); - background-position: -1641px 0px; + background-position: -1627px -738px; width: 40px; height: 40px; } .shop_weapon_special_summer2016Mage { background-image: url(spritesmith-main-5.png); - background-position: -1599px -1583px; + background-position: -41px -1561px; width: 40px; height: 40px; } .shop_weapon_special_summer2016Rogue { background-image: url(spritesmith-main-5.png); - background-position: -1558px -1583px; + background-position: 0px -1561px; width: 40px; height: 40px; } .shop_weapon_special_summer2016Warrior { background-image: url(spritesmith-main-5.png); - background-position: -1517px -1583px; + background-position: -1586px -1517px; width: 40px; height: 40px; } .shop_weapon_special_summerHealer { background-image: url(spritesmith-main-5.png); - background-position: -1476px -1583px; + background-position: -1586px -1476px; width: 40px; height: 40px; } .shop_weapon_special_summerMage { background-image: url(spritesmith-main-5.png); - background-position: -1435px -1583px; + background-position: -1586px -1435px; width: 40px; height: 40px; } .shop_weapon_special_summerRogue { background-image: url(spritesmith-main-5.png); - background-position: -779px -1542px; + background-position: -1586px -1394px; width: 40px; height: 40px; } .shop_weapon_special_summerWarrior { background-image: url(spritesmith-main-5.png); - background-position: -738px -1542px; + background-position: -1586px -1353px; width: 40px; height: 40px; } .slim_armor_special_summer2015Healer { background-image: url(spritesmith-main-5.png); - background-position: -737px -944px; + background-position: -91px -960px; width: 90px; height: 90px; } .slim_armor_special_summer2015Mage { background-image: url(spritesmith-main-5.png); - background-position: -828px -944px; + background-position: -182px -960px; width: 90px; height: 90px; } .slim_armor_special_summer2015Rogue { background-image: url(spritesmith-main-5.png); - background-position: -424px -429px; + background-position: -412px -387px; width: 102px; height: 105px; } .slim_armor_special_summer2015Warrior { background-image: url(spritesmith-main-5.png); - background-position: -182px -838px; + background-position: -528px -333px; width: 90px; height: 105px; } .slim_armor_special_summer2016Healer { background-image: url(spritesmith-main-5.png); - background-position: -901px -106px; + background-position: -430px -278px; width: 90px; height: 105px; } .slim_armor_special_summer2016Mage { background-image: url(spritesmith-main-5.png); - background-position: -364px -838px; + background-position: -855px 0px; width: 90px; height: 105px; } .slim_armor_special_summer2016Rogue { background-image: url(spritesmith-main-5.png); - background-position: -455px -838px; + background-position: -855px -106px; width: 90px; height: 105px; } .slim_armor_special_summer2016Warrior { background-image: url(spritesmith-main-5.png); - background-position: -218px -429px; + background-position: -528px 0px; width: 102px; height: 105px; } .slim_armor_special_summerHealer { background-image: url(spritesmith-main-5.png); - background-position: -789px -582px; + background-position: -855px -318px; width: 90px; height: 105px; } .slim_armor_special_summerMage { background-image: url(spritesmith-main-5.png); - background-position: -610px -424px; + background-position: -855px -424px; width: 90px; height: 105px; } .slim_armor_special_summerRogue { background-image: url(spritesmith-main-5.png); - background-position: -85px -629px; + background-position: 0px -584px; width: 111px; height: 90px; } .slim_armor_special_summerWarrior { background-image: url(spritesmith-main-5.png); - background-position: -197px -629px; + background-position: -112px -584px; width: 111px; height: 90px; } .weapon_special_summer2015Healer { background-image: url(spritesmith-main-5.png); - background-position: -1095px -819px; + background-position: -1131px -91px; width: 90px; height: 90px; } .weapon_special_summer2015Mage { background-image: url(spritesmith-main-5.png); - background-position: -1095px -910px; + background-position: -1131px -182px; width: 90px; height: 90px; } .weapon_special_summer2015Rogue { background-image: url(spritesmith-main-5.png); - background-position: -610px -212px; + background-position: -528px -106px; width: 102px; height: 105px; } .weapon_special_summer2015Warrior { background-image: url(spritesmith-main-5.png); - background-position: -901px -318px; + background-position: -91px -763px; width: 90px; height: 105px; } .weapon_special_summer2016Healer { background-image: url(spritesmith-main-5.png); - background-position: -182px -1035px; + background-position: -1131px -455px; width: 90px; height: 90px; } .weapon_special_summer2016Mage { background-image: url(spritesmith-main-5.png); - background-position: -273px -1035px; + background-position: -1131px -546px; width: 90px; height: 90px; } .weapon_special_summer2016Rogue { background-image: url(spritesmith-main-5.png); - background-position: 0px -429px; + background-position: 0px -278px; width: 108px; height: 108px; } .weapon_special_summer2016Warrior { background-image: url(spritesmith-main-5.png); - background-position: -321px -429px; + background-position: -327px -278px; width: 102px; height: 105px; } .weapon_special_summerHealer { background-image: url(spritesmith-main-5.png); - background-position: -901px -636px; + background-position: -364px -763px; width: 90px; height: 105px; } .weapon_special_summerMage { background-image: url(spritesmith-main-5.png); - background-position: 0px -838px; + background-position: -455px -763px; width: 90px; height: 105px; } .weapon_special_summerRogue { background-image: url(spritesmith-main-5.png); - background-position: -533px -629px; + background-position: -560px -584px; width: 111px; height: 90px; } .weapon_special_summerWarrior { background-image: url(spritesmith-main-5.png); - background-position: -645px -629px; + background-position: -743px 0px; width: 111px; height: 90px; } .back_special_takeThis { background-image: url(spritesmith-main-5.png); - background-position: 0px -750px; + background-position: 0px -675px; width: 114px; height: 87px; } .body_special_takeThis { background-image: url(spritesmith-main-5.png); - background-position: -1001px -1035px; + background-position: -273px -1051px; width: 90px; height: 90px; } .broad_armor_special_takeThis { background-image: url(spritesmith-main-5.png); - background-position: -1092px -1035px; + background-position: -364px -1051px; width: 90px; height: 90px; } .head_special_takeThis { background-image: url(spritesmith-main-5.png); - background-position: -1186px 0px; + background-position: -455px -1051px; width: 90px; height: 90px; } .shield_special_takeThis { background-image: url(spritesmith-main-5.png); - background-position: -992px -728px; + background-position: -1037px -91px; width: 93px; height: 90px; } .shop_armor_special_takeThis { background-image: url(spritesmith-main-5.png); - background-position: -697px -1542px; + background-position: -1586px -1312px; width: 40px; height: 40px; } .shop_back_special_takeThis { background-image: url(spritesmith-main-5.png); - background-position: -656px -1542px; + background-position: -1586px -1271px; width: 40px; height: 40px; } .shop_body_special_takeThis { background-image: url(spritesmith-main-5.png); - background-position: -615px -1542px; + background-position: -1586px -1230px; width: 40px; height: 40px; } .shop_head_special_takeThis { background-image: url(spritesmith-main-5.png); - background-position: -574px -1542px; + background-position: -1586px -1189px; width: 40px; height: 40px; } .shop_shield_special_takeThis { background-image: url(spritesmith-main-5.png); - background-position: -533px -1542px; + background-position: -1586px -1148px; width: 40px; height: 40px; } .shop_weapon_special_takeThis { background-image: url(spritesmith-main-5.png); - background-position: -492px -1542px; + background-position: -1586px -1107px; width: 40px; height: 40px; } .slim_armor_special_takeThis { background-image: url(spritesmith-main-5.png); - background-position: -1186px -728px; + background-position: -1222px 0px; width: 90px; height: 90px; } .weapon_special_takeThis { background-image: url(spritesmith-main-5.png); - background-position: -1186px -819px; + background-position: -1222px -91px; width: 90px; height: 90px; } .broad_armor_special_candycane { background-image: url(spritesmith-main-5.png); - background-position: -1186px -910px; + background-position: -1222px -182px; width: 90px; height: 90px; } .broad_armor_special_ski { background-image: url(spritesmith-main-5.png); - background-position: -1186px -1001px; + background-position: -1222px -273px; width: 90px; height: 90px; } .broad_armor_special_snowflake { background-image: url(spritesmith-main-5.png); - background-position: 0px -1126px; + background-position: -1222px -364px; width: 90px; height: 90px; } .broad_armor_special_winter2015Healer { background-image: url(spritesmith-main-5.png); - background-position: -91px -1126px; + background-position: -1222px -455px; width: 90px; height: 90px; } .broad_armor_special_winter2015Mage { background-image: url(spritesmith-main-5.png); - background-position: -182px -1126px; + background-position: -1222px -546px; width: 90px; height: 90px; } .broad_armor_special_winter2015Rogue { background-image: url(spritesmith-main-5.png); - background-position: -992px -273px; + background-position: -513px -869px; width: 96px; height: 90px; } .broad_armor_special_winter2015Warrior { background-image: url(spritesmith-main-5.png); - background-position: -364px -1126px; + background-position: -1222px -728px; width: 90px; height: 90px; } .broad_armor_special_winter2016Healer { background-image: url(spritesmith-main-5.png); - background-position: -992px -637px; + background-position: -1037px 0px; width: 93px; height: 90px; } .broad_armor_special_winter2016Mage { background-image: url(spritesmith-main-5.png); - background-position: -546px -1126px; + background-position: -1222px -910px; width: 90px; height: 90px; } .broad_armor_special_winter2016Rogue { background-image: url(spritesmith-main-5.png); - background-position: -637px -1126px; + background-position: -1222px -1001px; width: 90px; height: 90px; } .broad_armor_special_winter2016Warrior { background-image: url(spritesmith-main-5.png); - background-position: -728px -1126px; + background-position: 0px -1142px; width: 90px; height: 90px; } .broad_armor_special_yeti { background-image: url(spritesmith-main-5.png); - background-position: -819px -1126px; + background-position: -91px -1142px; width: 90px; height: 90px; } .head_special_candycane { background-image: url(spritesmith-main-5.png); - background-position: -910px -1126px; + background-position: -182px -1142px; width: 90px; height: 90px; } .head_special_nye { background-image: url(spritesmith-main-5.png); - background-position: -1001px -1126px; + background-position: -273px -1142px; width: 90px; height: 90px; } .head_special_nye2014 { background-image: url(spritesmith-main-5.png); - background-position: -1092px -1126px; + background-position: -364px -1142px; width: 90px; height: 90px; } .head_special_nye2015 { background-image: url(spritesmith-main-5.png); - background-position: -1183px -1126px; + background-position: -455px -1142px; width: 90px; height: 90px; } .head_special_ski { background-image: url(spritesmith-main-5.png); - background-position: -1277px 0px; + background-position: -546px -1142px; width: 90px; height: 90px; } .head_special_snowflake { background-image: url(spritesmith-main-5.png); - background-position: -1277px -91px; + background-position: -637px -1142px; width: 90px; height: 90px; } .head_special_winter2015Healer { background-image: url(spritesmith-main-5.png); - background-position: -1277px -182px; + background-position: -728px -1142px; width: 90px; height: 90px; } .head_special_winter2015Mage { background-image: url(spritesmith-main-5.png); - background-position: -1277px -273px; + background-position: -819px -1142px; width: 90px; height: 90px; } .head_special_winter2015Rogue { background-image: url(spritesmith-main-5.png); - background-position: -992px -364px; + background-position: -707px -869px; width: 96px; height: 90px; } .head_special_winter2015Warrior { background-image: url(spritesmith-main-5.png); - background-position: -1277px -455px; + background-position: -1001px -1142px; width: 90px; height: 90px; } .head_special_winter2016Healer { background-image: url(spritesmith-main-5.png); - background-position: -992px -819px; + background-position: -1037px -182px; width: 93px; height: 90px; } .head_special_winter2016Mage { background-image: url(spritesmith-main-5.png); - background-position: -1277px -637px; + background-position: -1183px -1142px; width: 90px; height: 90px; } .head_special_winter2016Rogue { background-image: url(spritesmith-main-5.png); - background-position: -1277px -728px; + background-position: -1313px 0px; width: 90px; height: 90px; } .head_special_winter2016Warrior { background-image: url(spritesmith-main-5.png); - background-position: -1277px -819px; + background-position: -1313px -91px; width: 90px; height: 90px; } .head_special_yeti { background-image: url(spritesmith-main-5.png); - background-position: -1277px -910px; + background-position: -1313px -182px; width: 90px; height: 90px; } .shield_special_ski { background-image: url(spritesmith-main-5.png); - background-position: -637px -838px; + background-position: 0px -869px; width: 104px; height: 90px; } .shield_special_snowflake { background-image: url(spritesmith-main-5.png); - background-position: -1277px -1092px; + background-position: -1313px -364px; width: 90px; height: 90px; } .shield_special_winter2015Healer { background-image: url(spritesmith-main-5.png); - background-position: 0px -1217px; + background-position: -1313px -455px; width: 90px; height: 90px; } .shield_special_winter2015Rogue { background-image: url(spritesmith-main-5.png); - background-position: -992px -182px; + background-position: -610px -869px; width: 96px; height: 90px; } .shield_special_winter2015Warrior { background-image: url(spritesmith-main-5.png); - background-position: -182px -1217px; + background-position: -1313px -637px; width: 90px; height: 90px; } .shield_special_winter2016Healer { background-image: url(spritesmith-main-5.png); - background-position: -94px -944px; + background-position: -1037px -364px; width: 93px; height: 90px; } .shield_special_winter2016Rogue { background-image: url(spritesmith-main-5.png); - background-position: -364px -1217px; + background-position: -1313px -819px; width: 90px; height: 90px; } .shield_special_winter2016Warrior { background-image: url(spritesmith-main-5.png); - background-position: -455px -1217px; + background-position: -1313px -910px; width: 90px; height: 90px; } .shield_special_yeti { background-image: url(spritesmith-main-5.png); - background-position: -546px -1217px; + background-position: -1313px -1001px; width: 90px; height: 90px; } .shop_armor_special_candycane { background-image: url(spritesmith-main-5.png); - background-position: -451px -1542px; + background-position: -1586px -1066px; width: 40px; height: 40px; } .shop_armor_special_ski { background-image: url(spritesmith-main-5.png); - background-position: -410px -1542px; + background-position: -1586px -1025px; width: 40px; height: 40px; } .shop_armor_special_snowflake { background-image: url(spritesmith-main-5.png); - background-position: -369px -1542px; + background-position: -1586px -984px; width: 40px; height: 40px; } .shop_armor_special_winter2015Healer { background-image: url(spritesmith-main-5.png); - background-position: -328px -1542px; + background-position: -1586px -943px; width: 40px; height: 40px; } .shop_armor_special_winter2015Mage { background-image: url(spritesmith-main-5.png); - background-position: -287px -1542px; + background-position: -1586px -902px; width: 40px; height: 40px; } .shop_armor_special_winter2015Rogue { background-image: url(spritesmith-main-5.png); - background-position: -246px -1542px; + background-position: -1586px -861px; width: 40px; height: 40px; } .shop_armor_special_winter2015Warrior { background-image: url(spritesmith-main-5.png); - background-position: -205px -1542px; + background-position: -1586px -820px; width: 40px; height: 40px; } .shop_armor_special_winter2016Healer { background-image: url(spritesmith-main-5.png); - background-position: -164px -1542px; + background-position: -1586px -451px; width: 40px; height: 40px; } .shop_armor_special_winter2016Mage { background-image: url(spritesmith-main-5.png); - background-position: -123px -1542px; + background-position: -1586px -410px; width: 40px; height: 40px; } .shop_armor_special_winter2016Rogue { background-image: url(spritesmith-main-5.png); - background-position: -82px -1542px; + background-position: -1586px -369px; width: 40px; height: 40px; } .shop_armor_special_winter2016Warrior { background-image: url(spritesmith-main-5.png); - background-position: -41px -1542px; + background-position: -1586px -328px; width: 40px; height: 40px; } .shop_armor_special_yeti { background-image: url(spritesmith-main-5.png); - background-position: 0px -1542px; + background-position: -1586px -287px; width: 40px; height: 40px; } .shop_head_special_candycane { background-image: url(spritesmith-main-5.png); - background-position: -1244px -1490px; + background-position: -1586px -246px; width: 40px; height: 40px; } .shop_head_special_nye { background-image: url(spritesmith-main-5.png); - background-position: -1203px -1490px; + background-position: -1586px -205px; width: 40px; height: 40px; } .shop_head_special_nye2014 { background-image: url(spritesmith-main-5.png); - background-position: -1162px -1490px; + background-position: -1586px -164px; width: 40px; height: 40px; } .shop_head_special_nye2015 { background-image: url(spritesmith-main-5.png); - background-position: -1121px -1490px; + background-position: -1078px -910px; width: 40px; height: 40px; } .shop_head_special_ski { background-image: url(spritesmith-main-5.png); - background-position: -1080px -1490px; + background-position: -1037px -910px; width: 40px; height: 40px; } .shop_head_special_snowflake { background-image: url(spritesmith-main-5.png); - background-position: -1039px -1490px; + background-position: -1172px -1001px; width: 40px; height: 40px; } .shop_head_special_winter2015Healer { background-image: url(spritesmith-main-5.png); - background-position: -998px -1490px; + background-position: -1131px -1001px; width: 40px; height: 40px; } .shop_head_special_winter2015Mage { background-image: url(spritesmith-main-5.png); - background-position: -957px -1490px; + background-position: -1263px -1092px; width: 40px; height: 40px; } .shop_head_special_winter2015Rogue { background-image: url(spritesmith-main-5.png); - background-position: -318px -750px; + background-position: -1222px -1092px; width: 40px; height: 40px; } .shop_head_special_winter2015Warrior { background-image: url(spritesmith-main-5.png); - background-position: -277px -750px; + background-position: -1354px -1183px; width: 40px; height: 40px; } .shop_head_special_winter2016Healer { background-image: url(spritesmith-main-5.png); - background-position: -236px -750px; + background-position: -1313px -1183px; width: 40px; height: 40px; } .shop_head_special_winter2016Mage { background-image: url(spritesmith-main-5.png); - background-position: -568px -304px; + background-position: -1445px -1274px; width: 40px; height: 40px; } .shop_head_special_winter2016Rogue { background-image: url(spritesmith-main-5.png); - background-position: -568px -263px; + background-position: -1668px -861px; width: 40px; height: 40px; } .shop_head_special_winter2016Warrior { background-image: url(spritesmith-main-5.png); - background-position: -1558px -1624px; + background-position: -1668px -533px; width: 40px; height: 40px; } .shop_head_special_yeti { background-image: url(spritesmith-main-5.png); - background-position: -1230px -1624px; + background-position: -1668px -492px; width: 40px; height: 40px; } .shop_shield_special_ski { background-image: url(spritesmith-main-5.png); - background-position: -1189px -1624px; + background-position: -1668px -451px; width: 40px; height: 40px; } .shop_shield_special_snowflake { background-image: url(spritesmith-main-5.png); - background-position: -1148px -1624px; + background-position: -1668px -410px; width: 40px; height: 40px; } .shop_shield_special_winter2015Healer { background-image: url(spritesmith-main-5.png); - background-position: -1107px -1624px; + background-position: -1668px -369px; width: 40px; height: 40px; } .shop_shield_special_winter2015Rogue { background-image: url(spritesmith-main-5.png); - background-position: -1066px -1624px; + background-position: -1668px -246px; width: 40px; height: 40px; } .shop_shield_special_winter2015Warrior { background-image: url(spritesmith-main-5.png); - background-position: -943px -1624px; + background-position: -1668px -205px; width: 40px; height: 40px; } .shop_shield_special_winter2016Healer { background-image: url(spritesmith-main-5.png); - background-position: -902px -1624px; + background-position: -1668px -164px; width: 40px; height: 40px; } .shop_shield_special_winter2016Rogue { background-image: url(spritesmith-main-5.png); - background-position: -861px -1624px; + background-position: -1668px -123px; width: 40px; height: 40px; } .shop_shield_special_winter2016Warrior { background-image: url(spritesmith-main-5.png); - background-position: -820px -1624px; + background-position: -1668px -82px; width: 40px; height: 40px; } .shop_shield_special_yeti { background-image: url(spritesmith-main-5.png); - background-position: -779px -1624px; + background-position: -1668px -41px; width: 40px; height: 40px; } .shop_weapon_special_candycane { background-image: url(spritesmith-main-5.png); - background-position: -738px -1624px; + background-position: -1668px 0px; width: 40px; height: 40px; } .shop_weapon_special_ski { background-image: url(spritesmith-main-5.png); - background-position: -697px -1624px; + background-position: -1599px -1602px; width: 40px; height: 40px; } .shop_weapon_special_snowflake { background-image: url(spritesmith-main-5.png); - background-position: -656px -1624px; + background-position: -1230px -1602px; width: 40px; height: 40px; } .shop_weapon_special_winter2015Healer { background-image: url(spritesmith-main-5.png); - background-position: -615px -1624px; + background-position: -1189px -1602px; width: 40px; height: 40px; } .shop_weapon_special_winter2015Mage { background-image: url(spritesmith-main-5.png); - background-position: -533px -1624px; + background-position: -1148px -1602px; width: 40px; height: 40px; } .shop_weapon_special_winter2015Rogue { background-image: url(spritesmith-main-5.png); - background-position: -492px -1624px; + background-position: -1107px -1602px; width: 40px; height: 40px; } .shop_weapon_special_winter2015Warrior { background-image: url(spritesmith-main-5.png); - background-position: -451px -1624px; + background-position: -1066px -1602px; width: 40px; height: 40px; } .shop_weapon_special_winter2016Healer { background-image: url(spritesmith-main-5.png); - background-position: -123px -1624px; + background-position: -1025px -1602px; width: 40px; height: 40px; } .shop_weapon_special_winter2016Mage { background-image: url(spritesmith-main-5.png); - background-position: -82px -1624px; + background-position: -984px -1602px; width: 40px; height: 40px; } .shop_weapon_special_winter2016Rogue { background-image: url(spritesmith-main-5.png); - background-position: -41px -1624px; + background-position: -820px -1602px; width: 40px; height: 40px; } .shop_weapon_special_winter2016Warrior { background-image: url(spritesmith-main-5.png); - background-position: 0px -1624px; + background-position: -861px -1561px; width: 40px; height: 40px; } .shop_weapon_special_yeti { background-image: url(spritesmith-main-5.png); - background-position: -1641px -1558px; + background-position: -615px -1602px; width: 40px; height: 40px; } .slim_armor_special_candycane { background-image: url(spritesmith-main-5.png); - background-position: -1459px -910px; + background-position: -1495px -182px; width: 90px; height: 90px; } .slim_armor_special_ski { background-image: url(spritesmith-main-5.png); - background-position: -1459px -1001px; + background-position: -1495px -273px; width: 90px; height: 90px; } .slim_armor_special_snowflake { background-image: url(spritesmith-main-5.png); - background-position: -1459px -1092px; + background-position: -1495px -364px; width: 90px; height: 90px; } .slim_armor_special_winter2015Healer { background-image: url(spritesmith-main-5.png); - background-position: -1459px -1183px; + background-position: -1495px -455px; width: 90px; height: 90px; } .slim_armor_special_winter2015Mage { background-image: url(spritesmith-main-5.png); - background-position: -1459px -1274px; + background-position: -1495px -546px; width: 90px; height: 90px; } .slim_armor_special_winter2015Rogue { background-image: url(spritesmith-main-5.png); - background-position: -992px -455px; + background-position: -804px -869px; width: 96px; height: 90px; } .slim_armor_special_winter2015Warrior { background-image: url(spritesmith-main-5.png); - background-position: -91px -1399px; + background-position: -1495px -728px; width: 90px; height: 90px; } .slim_armor_special_winter2016Healer { background-image: url(spritesmith-main-5.png); - background-position: 0px -944px; + background-position: -1037px -273px; width: 93px; height: 90px; } .slim_armor_special_winter2016Mage { background-image: url(spritesmith-main-5.png); - background-position: -273px -1399px; + background-position: -1495px -910px; width: 90px; height: 90px; } .slim_armor_special_winter2016Rogue { background-image: url(spritesmith-main-5.png); - background-position: -364px -1399px; + background-position: -1495px -1001px; width: 90px; height: 90px; } .slim_armor_special_winter2016Warrior { background-image: url(spritesmith-main-5.png); - background-position: -455px -1399px; + background-position: -1495px -1092px; width: 90px; height: 90px; } .slim_armor_special_yeti { background-image: url(spritesmith-main-5.png); - background-position: -546px -1399px; + background-position: -1495px -1183px; width: 90px; height: 90px; } .weapon_special_candycane { background-image: url(spritesmith-main-5.png); - background-position: -637px -1399px; + background-position: -1495px -1274px; width: 90px; height: 90px; } .weapon_special_ski { background-image: url(spritesmith-main-5.png); - background-position: -728px -1399px; + background-position: 0px -1415px; width: 90px; height: 90px; } .weapon_special_snowflake { background-image: url(spritesmith-main-5.png); - background-position: -819px -1399px; + background-position: -91px -1415px; width: 90px; height: 90px; } .weapon_special_winter2015Healer { background-image: url(spritesmith-main-5.png); - background-position: -910px -1399px; + background-position: -182px -1415px; width: 90px; height: 90px; } .weapon_special_winter2015Mage { background-image: url(spritesmith-main-5.png); - background-position: -1001px -1399px; + background-position: -273px -1415px; width: 90px; height: 90px; } .weapon_special_winter2015Rogue { background-image: url(spritesmith-main-5.png); - background-position: -992px -546px; + background-position: -901px -869px; width: 96px; height: 90px; } .weapon_special_winter2015Warrior { background-image: url(spritesmith-main-5.png); - background-position: -1183px -1399px; + background-position: -455px -1415px; width: 90px; height: 90px; } .weapon_special_winter2016Healer { background-image: url(spritesmith-main-5.png); - background-position: -188px -944px; + background-position: -1037px -455px; width: 93px; height: 90px; } .weapon_special_winter2016Mage { background-image: url(spritesmith-main-5.png); - background-position: -1365px -1399px; + background-position: -637px -1415px; width: 90px; height: 90px; } .weapon_special_winter2016Rogue { background-image: url(spritesmith-main-5.png); - background-position: -1456px -1399px; + background-position: -728px -1415px; width: 90px; height: 90px; } .weapon_special_winter2016Warrior { background-image: url(spritesmith-main-5.png); - background-position: -1550px 0px; + background-position: -819px -1415px; width: 90px; height: 90px; } .weapon_special_yeti { background-image: url(spritesmith-main-5.png); - background-position: -1550px -91px; + background-position: -910px -1415px; width: 90px; height: 90px; } .back_special_wondercon_black { background-image: url(spritesmith-main-5.png); - background-position: -1550px -182px; + background-position: -1001px -1415px; width: 90px; height: 90px; } .back_special_wondercon_red { background-image: url(spritesmith-main-5.png); - background-position: -1550px -273px; + background-position: -1092px -1415px; width: 90px; height: 90px; } .body_special_wondercon_black { background-image: url(spritesmith-main-5.png); - background-position: -1550px -364px; + background-position: -1183px -1415px; width: 90px; height: 90px; } .body_special_wondercon_gold { background-image: url(spritesmith-main-5.png); - background-position: -1550px -455px; + background-position: -1274px -1415px; width: 90px; height: 90px; } .body_special_wondercon_red { background-image: url(spritesmith-main-5.png); - background-position: -1550px -546px; + background-position: -1365px -1415px; width: 90px; height: 90px; } .eyewear_special_wondercon_black { background-image: url(spritesmith-main-5.png); - background-position: -1550px -637px; + background-position: -1495px -91px; width: 90px; height: 90px; } .eyewear_special_wondercon_red { background-image: url(spritesmith-main-5.png); - background-position: -1550px -728px; + background-position: -1495px 0px; width: 90px; height: 90px; } .shop_back_special_wondercon_black { background-image: url(spritesmith-main-5.png); - background-position: -1641px -1517px; + background-position: -697px -1602px; width: 40px; height: 40px; } .shop_back_special_wondercon_red { background-image: url(spritesmith-main-5.png); - background-position: -1641px -1476px; + background-position: -738px -1602px; width: 40px; height: 40px; } .shop_body_special_wondercon_black { background-image: url(spritesmith-main-5.png); - background-position: -1641px -1271px; + background-position: -779px -1602px; width: 40px; height: 40px; } .shop_body_special_wondercon_gold { background-image: url(spritesmith-main-5.png); - background-position: -164px -1583px; + background-position: -1668px -1025px; width: 40px; height: 40px; } .shop_body_special_wondercon_red { background-image: url(spritesmith-main-5.png); - background-position: -1641px -1353px; + background-position: -861px -1602px; width: 40px; height: 40px; } .shop_eyewear_special_wondercon_black { background-image: url(spritesmith-main-5.png); - background-position: -1641px -1394px; + background-position: -902px -1602px; width: 40px; height: 40px; } .shop_eyewear_special_wondercon_red { background-image: url(spritesmith-main-5.png); - background-position: -1641px -1435px; + background-position: -943px -1602px; width: 40px; height: 40px; } .eyewear_special_blackTopFrame { background-image: url(spritesmith-main-5.png); - background-position: -1550px -910px; + background-position: -1274px -1324px; width: 90px; height: 90px; } .customize-option.eyewear_special_blackTopFrame { background-image: url(spritesmith-main-5.png); - background-position: -1575px -925px; + background-position: -1299px -1339px; width: 60px; height: 60px; } .eyewear_special_blueTopFrame { background-image: url(spritesmith-main-5.png); - background-position: -1550px -819px; + background-position: -1183px -1324px; width: 90px; height: 90px; } .customize-option.eyewear_special_blueTopFrame { background-image: url(spritesmith-main-5.png); - background-position: -1575px -834px; + background-position: -1208px -1339px; width: 60px; height: 60px; } .eyewear_special_greenTopFrame { background-image: url(spritesmith-main-5.png); - background-position: -1459px -819px; + background-position: -1092px -1324px; width: 90px; height: 90px; } .customize-option.eyewear_special_greenTopFrame { background-image: url(spritesmith-main-5.png); - background-position: -1484px -834px; + background-position: -1117px -1339px; width: 60px; height: 60px; } .eyewear_special_pinkTopFrame { background-image: url(spritesmith-main-5.png); - background-position: -1459px -728px; + background-position: -1001px -1324px; width: 90px; height: 90px; } .customize-option.eyewear_special_pinkTopFrame { background-image: url(spritesmith-main-5.png); - background-position: -1484px -743px; + background-position: -1026px -1339px; width: 60px; height: 60px; } .eyewear_special_redTopFrame { background-image: url(spritesmith-main-5.png); - background-position: -1459px -637px; + background-position: -910px -1324px; width: 90px; height: 90px; } .customize-option.eyewear_special_redTopFrame { background-image: url(spritesmith-main-5.png); - background-position: -1484px -652px; + background-position: -935px -1339px; width: 60px; height: 60px; } .eyewear_special_whiteTopFrame { background-image: url(spritesmith-main-5.png); - background-position: -1550px -1001px; + background-position: -819px -1324px; width: 90px; height: 90px; } .customize-option.eyewear_special_whiteTopFrame { background-image: url(spritesmith-main-5.png); - background-position: -1575px -1016px; + background-position: -844px -1339px; width: 60px; height: 60px; } .eyewear_special_yellowTopFrame { background-image: url(spritesmith-main-5.png); - background-position: -1459px -455px; + background-position: -728px -1324px; width: 90px; height: 90px; } .customize-option.eyewear_special_yellowTopFrame { background-image: url(spritesmith-main-5.png); - background-position: -1484px -470px; + background-position: -753px -1339px; width: 60px; height: 60px; } .shop_eyewear_special_blackTopFrame { background-image: url(spritesmith-main-5.png); - background-position: -164px -1624px; + background-position: -1271px -1602px; width: 40px; height: 40px; } .shop_eyewear_special_blueTopFrame { background-image: url(spritesmith-main-5.png); - background-position: -205px -1624px; + background-position: -1312px -1602px; width: 40px; height: 40px; } .shop_eyewear_special_greenTopFrame { background-image: url(spritesmith-main-5.png); - background-position: -246px -1624px; + background-position: -1353px -1602px; width: 40px; height: 40px; } .shop_eyewear_special_pinkTopFrame { background-image: url(spritesmith-main-5.png); - background-position: -287px -1624px; + background-position: -1394px -1602px; width: 40px; height: 40px; } .shop_eyewear_special_redTopFrame { background-image: url(spritesmith-main-5.png); - background-position: -328px -1624px; + background-position: -1435px -1602px; width: 40px; height: 40px; } .shop_eyewear_special_whiteTopFrame { background-image: url(spritesmith-main-5.png); - background-position: -369px -1624px; + background-position: -1476px -1602px; width: 40px; height: 40px; } .shop_eyewear_special_yellowTopFrame { background-image: url(spritesmith-main-5.png); - background-position: -410px -1624px; + background-position: -1558px -1602px; width: 40px; height: 40px; } .head_0 { background-image: url(spritesmith-main-5.png); - background-position: -1459px -364px; + background-position: -637px -1324px; width: 90px; height: 90px; } .customize-option.head_0 { background-image: url(spritesmith-main-5.png); - background-position: -1484px -379px; + background-position: -662px -1339px; width: 60px; height: 60px; } .head_healer_1 { background-image: url(spritesmith-main-5.png); - background-position: -1459px -273px; + background-position: -546px -1324px; width: 90px; height: 90px; } .head_healer_2 { background-image: url(spritesmith-main-5.png); - background-position: -1459px -182px; + background-position: -455px -1324px; width: 90px; height: 90px; } .head_healer_3 { background-image: url(spritesmith-main-5.png); - background-position: -1459px -91px; + background-position: -364px -1324px; width: 90px; height: 90px; } .head_healer_4 { background-image: url(spritesmith-main-5.png); - background-position: -1459px 0px; + background-position: -273px -1324px; width: 90px; height: 90px; } .head_healer_5 { background-image: url(spritesmith-main-5.png); - background-position: -1365px -1308px; + background-position: -182px -1324px; width: 90px; height: 90px; } .head_rogue_1 { background-image: url(spritesmith-main-5.png); - background-position: -1274px -1308px; + background-position: -91px -1324px; width: 90px; height: 90px; } .head_rogue_2 { background-image: url(spritesmith-main-5.png); - background-position: -1183px -1308px; + background-position: 0px -1324px; width: 90px; height: 90px; } .head_rogue_3 { background-image: url(spritesmith-main-5.png); - background-position: -1092px -1308px; + background-position: -1404px -1183px; width: 90px; height: 90px; } .head_rogue_4 { background-image: url(spritesmith-main-5.png); - background-position: -1001px -1308px; + background-position: -1404px -1092px; width: 90px; height: 90px; } .head_rogue_5 { background-image: url(spritesmith-main-5.png); - background-position: -910px -1308px; + background-position: -1404px -1001px; width: 90px; height: 90px; } .head_special_2 { background-image: url(spritesmith-main-5.png); - background-position: -819px -1308px; + background-position: -1404px -910px; width: 90px; height: 90px; } .head_special_fireCoralCirclet { background-image: url(spritesmith-main-5.png); - background-position: -728px -1308px; + background-position: -1404px -819px; width: 90px; height: 90px; } .head_warrior_1 { background-image: url(spritesmith-main-5.png); - background-position: -637px -1308px; + background-position: -1404px -728px; width: 90px; height: 90px; } .head_warrior_2 { background-image: url(spritesmith-main-5.png); - background-position: -546px -1308px; + background-position: -1404px -637px; width: 90px; height: 90px; } .head_warrior_3 { background-image: url(spritesmith-main-5.png); - background-position: -455px -1308px; + background-position: -1404px -546px; width: 90px; height: 90px; } .head_warrior_4 { background-image: url(spritesmith-main-5.png); - background-position: -364px -1308px; + background-position: -1404px -455px; width: 90px; height: 90px; } .head_warrior_5 { background-image: url(spritesmith-main-5.png); - background-position: -273px -1308px; + background-position: -1404px -364px; width: 90px; height: 90px; } .head_wizard_1 { background-image: url(spritesmith-main-5.png); - background-position: -182px -1308px; + background-position: -1404px -273px; width: 90px; height: 90px; } .head_wizard_2 { background-image: url(spritesmith-main-5.png); - background-position: -91px -1308px; + background-position: -1404px -182px; width: 90px; height: 90px; } .head_wizard_3 { background-image: url(spritesmith-main-5.png); - background-position: 0px -1308px; + background-position: -1404px -91px; width: 90px; height: 90px; } .head_wizard_4 { background-image: url(spritesmith-main-5.png); - background-position: -1368px -1183px; + background-position: -1404px 0px; width: 90px; height: 90px; } .head_wizard_5 { background-image: url(spritesmith-main-5.png); - background-position: -1368px -1092px; + background-position: -1274px -1233px; width: 90px; height: 90px; } .shop_head_healer_1 { background-image: url(spritesmith-main-5.png); - background-position: -359px -750px; + background-position: -236px -675px; width: 40px; height: 40px; } .shop_head_healer_2 { background-image: url(spritesmith-main-5.png); - background-position: -400px -750px; + background-position: -277px -675px; width: 40px; height: 40px; } .shop_head_healer_3 { background-image: url(spritesmith-main-5.png); - background-position: -441px -750px; + background-position: -318px -675px; width: 40px; height: 40px; } .shop_head_healer_4 { background-image: url(spritesmith-main-5.png); - background-position: -482px -750px; + background-position: -359px -675px; width: 40px; height: 40px; } .shop_head_healer_5 { background-image: url(spritesmith-main-5.png); - background-position: -523px -750px; + background-position: -400px -675px; width: 40px; height: 40px; } .shop_head_rogue_1 { background-image: url(spritesmith-main-5.png); - background-position: -564px -750px; + background-position: -441px -675px; width: 40px; height: 40px; } .shop_head_rogue_2 { background-image: url(spritesmith-main-5.png); - background-position: -605px -750px; + background-position: -482px -675px; width: 40px; height: 40px; } .shop_head_rogue_3 { background-image: url(spritesmith-main-5.png); - background-position: -646px -750px; + background-position: -523px -675px; width: 40px; height: 40px; } .shop_head_rogue_4 { background-image: url(spritesmith-main-5.png); - background-position: -687px -750px; + background-position: -564px -675px; width: 40px; height: 40px; } .shop_head_rogue_5 { background-image: url(spritesmith-main-5.png); - background-position: -728px -750px; + background-position: -605px -675px; width: 40px; height: 40px; } .shop_head_special_0 { background-image: url(spritesmith-main-5.png); - background-position: -769px -750px; + background-position: -646px -675px; width: 40px; height: 40px; } .shop_head_special_1 { background-image: url(spritesmith-main-5.png); - background-position: -810px -750px; + background-position: -687px -675px; width: 40px; height: 40px; } .shop_head_special_2 { background-image: url(spritesmith-main-5.png); - background-position: -851px -750px; + background-position: -728px -675px; width: 40px; height: 40px; } .shop_head_special_fireCoralCirclet { background-image: url(spritesmith-main-5.png); - background-position: -950px -838px; + background-position: -769px -675px; width: 40px; height: 40px; } .shop_head_warrior_1 { background-image: url(spritesmith-main-5.png); - background-position: -950px -879px; + background-position: -810px -675px; width: 40px; height: 40px; } .shop_head_warrior_2 { background-image: url(spritesmith-main-5.png); - background-position: -588px -1490px; + background-position: -1370px -1506px; width: 40px; height: 40px; } .shop_head_warrior_3 { background-image: url(spritesmith-main-5.png); - background-position: -629px -1490px; + background-position: -1411px -1506px; width: 40px; height: 40px; } .shop_head_warrior_4 { background-image: url(spritesmith-main-5.png); - background-position: -670px -1490px; + background-position: -1452px -1506px; width: 40px; height: 40px; } .shop_head_warrior_5 { background-image: url(spritesmith-main-5.png); - background-position: -711px -1490px; + background-position: -1493px -1506px; width: 40px; height: 40px; } .shop_head_wizard_1 { background-image: url(spritesmith-main-5.png); - background-position: -752px -1490px; + background-position: -1534px -1506px; width: 40px; height: 40px; } .shop_head_wizard_2 { background-image: url(spritesmith-main-5.png); - background-position: -793px -1490px; + background-position: -1586px 0px; width: 40px; height: 40px; } .shop_head_wizard_3 { background-image: url(spritesmith-main-5.png); - background-position: -834px -1490px; + background-position: -1586px -41px; width: 40px; height: 40px; } .shop_head_wizard_4 { background-image: url(spritesmith-main-5.png); - background-position: -875px -1490px; + background-position: -1586px -82px; width: 40px; height: 40px; } .shop_head_wizard_5 { background-image: url(spritesmith-main-5.png); - background-position: -916px -1490px; + background-position: -1586px -123px; width: 40px; height: 40px; } .headAccessory_special_bearEars { background-image: url(spritesmith-main-5.png); - background-position: -1368px -1001px; + background-position: -1183px -1233px; width: 90px; height: 90px; } .customize-option.headAccessory_special_bearEars { background-image: url(spritesmith-main-5.png); - background-position: -1393px -1016px; + background-position: -1208px -1248px; width: 60px; height: 60px; } .headAccessory_special_cactusEars { background-image: url(spritesmith-main-5.png); - background-position: -1368px -910px; + background-position: -1092px -1233px; width: 90px; height: 90px; } .customize-option.headAccessory_special_cactusEars { background-image: url(spritesmith-main-5.png); - background-position: -1393px -925px; + background-position: -1117px -1248px; width: 60px; height: 60px; } .headAccessory_special_foxEars { background-image: url(spritesmith-main-5.png); - background-position: -1368px -819px; + background-position: -1001px -1233px; width: 90px; height: 90px; } .customize-option.headAccessory_special_foxEars { background-image: url(spritesmith-main-5.png); - background-position: -1393px -834px; + background-position: -1026px -1248px; width: 60px; height: 60px; } .headAccessory_special_lionEars { background-image: url(spritesmith-main-5.png); - background-position: -1368px -728px; + background-position: -910px -1233px; width: 90px; height: 90px; } .customize-option.headAccessory_special_lionEars { background-image: url(spritesmith-main-5.png); - background-position: -1393px -743px; + background-position: -935px -1248px; width: 60px; height: 60px; } .headAccessory_special_pandaEars { background-image: url(spritesmith-main-5.png); - background-position: -1368px -637px; + background-position: -819px -1233px; width: 90px; height: 90px; } .customize-option.headAccessory_special_pandaEars { background-image: url(spritesmith-main-5.png); - background-position: -1393px -652px; + background-position: -844px -1248px; width: 60px; height: 60px; } .headAccessory_special_pigEars { background-image: url(spritesmith-main-5.png); - background-position: -1368px -546px; + background-position: -728px -1233px; width: 90px; height: 90px; } .customize-option.headAccessory_special_pigEars { background-image: url(spritesmith-main-5.png); - background-position: -1393px -561px; + background-position: -753px -1248px; width: 60px; height: 60px; } .headAccessory_special_tigerEars { background-image: url(spritesmith-main-5.png); - background-position: -1368px -455px; + background-position: -637px -1233px; width: 90px; height: 90px; } .customize-option.headAccessory_special_tigerEars { background-image: url(spritesmith-main-5.png); - background-position: -1393px -470px; + background-position: -662px -1248px; width: 60px; height: 60px; } .headAccessory_special_wolfEars { background-image: url(spritesmith-main-5.png); - background-position: -1368px -364px; + background-position: -546px -1233px; width: 90px; height: 90px; } .customize-option.headAccessory_special_wolfEars { background-image: url(spritesmith-main-5.png); - background-position: -1393px -379px; + background-position: -571px -1248px; width: 60px; height: 60px; } .shop_headAccessory_special_bearEars { background-image: url(spritesmith-main-5.png); - background-position: -1285px -1490px; + background-position: -1586px -492px; width: 40px; height: 40px; } .shop_headAccessory_special_cactusEars { background-image: url(spritesmith-main-5.png); - background-position: -1326px -1490px; + background-position: -1586px -533px; width: 40px; height: 40px; } .shop_headAccessory_special_foxEars { background-image: url(spritesmith-main-5.png); - background-position: -1367px -1490px; + background-position: -1586px -574px; width: 40px; height: 40px; } .shop_headAccessory_special_lionEars { background-image: url(spritesmith-main-5.png); - background-position: -1408px -1490px; + background-position: -1586px -615px; width: 40px; height: 40px; } .shop_headAccessory_special_pandaEars { background-image: url(spritesmith-main-5.png); - background-position: -1449px -1490px; + background-position: -1586px -656px; width: 40px; height: 40px; } .shop_headAccessory_special_pigEars { background-image: url(spritesmith-main-5.png); - background-position: -1490px -1490px; + background-position: -1586px -697px; width: 40px; height: 40px; } .shop_headAccessory_special_tigerEars { background-image: url(spritesmith-main-5.png); - background-position: -1531px -1490px; + background-position: -1586px -738px; width: 40px; height: 40px; } .shop_headAccessory_special_wolfEars { background-image: url(spritesmith-main-5.png); - background-position: -1572px -1490px; + background-position: -1586px -779px; width: 40px; height: 40px; } .shield_healer_1 { background-image: url(spritesmith-main-5.png); - background-position: -1368px -273px; + background-position: -455px -1233px; width: 90px; height: 90px; } .shield_healer_2 { background-image: url(spritesmith-main-5.png); - background-position: -1368px -182px; + background-position: -364px -1233px; width: 90px; height: 90px; } .shield_healer_3 { background-image: url(spritesmith-main-5.png); - background-position: -1368px -91px; + background-position: -273px -1233px; width: 90px; height: 90px; } .shield_healer_4 { background-image: url(spritesmith-main-5.png); - background-position: -1368px 0px; + background-position: -182px -1233px; width: 90px; height: 90px; } .shield_healer_5 { background-image: url(spritesmith-main-5.png); - background-position: -1274px -1217px; + background-position: -91px -1233px; width: 90px; height: 90px; } .shield_rogue_0 { background-image: url(spritesmith-main-5.png); - background-position: -1183px -1217px; + background-position: 0px -1233px; width: 90px; height: 90px; } .shield_rogue_1 { background-image: url(spritesmith-main-5.png); - background-position: -846px -838px; + background-position: -105px -869px; width: 103px; height: 90px; } .shield_rogue_2 { background-image: url(spritesmith-main-5.png); - background-position: -742px -838px; + background-position: -209px -869px; width: 103px; height: 90px; } .shield_rogue_3 { background-image: url(spritesmith-main-5.png); - background-position: -115px -538px; + background-position: 0px -493px; width: 114px; height: 90px; } .shield_rogue_4 { background-image: url(spritesmith-main-5.png); - background-position: -992px -91px; + background-position: -416px -869px; width: 96px; height: 90px; } .shield_rogue_5 { background-image: url(spritesmith-main-5.png); - background-position: -230px -538px; + background-position: -230px -493px; width: 114px; height: 90px; } .shield_rogue_6 { background-image: url(spritesmith-main-5.png); - background-position: 0px -538px; + background-position: -115px -493px; width: 114px; height: 90px; } .shield_special_1 { background-image: url(spritesmith-main-5.png); - background-position: -1186px -637px; + background-position: -637px -1051px; width: 90px; height: 90px; } .shield_special_goldenknight { background-image: url(spritesmith-main-5.png); - background-position: -789px -91px; + background-position: -631px -273px; width: 111px; height: 90px; } .shield_special_moonpearlShield { background-image: url(spritesmith-main-5.png); - background-position: -1186px -455px; + background-position: -946px -773px; width: 90px; height: 90px; } .shield_warrior_1 { background-image: url(spritesmith-main-5.png); - background-position: -1186px -364px; + background-position: -946px -682px; width: 90px; height: 90px; } .shield_warrior_2 { background-image: url(spritesmith-main-5.png); - background-position: -1186px -273px; + background-position: -946px -591px; width: 90px; height: 90px; } .shield_warrior_3 { background-image: url(spritesmith-main-5.png); - background-position: -1186px -182px; + background-position: -946px -500px; width: 90px; height: 90px; } .shield_warrior_4 { background-image: url(spritesmith-main-5.png); - background-position: -646px -944px; + background-position: -946px -409px; width: 90px; height: 90px; } .shield_warrior_5 { background-image: url(spritesmith-main-5.png); - background-position: -555px -944px; + background-position: -946px -318px; width: 90px; height: 90px; } .shop_shield_healer_1 { background-image: url(spritesmith-main-5.png); - background-position: -820px -1542px; + background-position: -82px -1561px; width: 40px; height: 40px; } .shop_shield_healer_2 { background-image: url(spritesmith-main-5.png); - background-position: -861px -1542px; + background-position: -123px -1561px; width: 40px; height: 40px; } .shop_shield_healer_3 { background-image: url(spritesmith-main-5.png); - background-position: -902px -1542px; + background-position: -164px -1561px; width: 40px; height: 40px; } .shop_shield_healer_4 { background-image: url(spritesmith-main-5.png); - background-position: -943px -1542px; + background-position: -205px -1561px; width: 40px; height: 40px; } .shop_shield_healer_5 { background-image: url(spritesmith-main-5.png); - background-position: -984px -1542px; + background-position: -246px -1561px; width: 40px; height: 40px; } .shop_shield_rogue_0 { background-image: url(spritesmith-main-5.png); - background-position: -1025px -1542px; + background-position: -287px -1561px; width: 40px; height: 40px; } .shop_shield_rogue_1 { background-image: url(spritesmith-main-5.png); - background-position: -1066px -1542px; + background-position: -328px -1561px; width: 40px; height: 40px; } .shop_shield_rogue_2 { background-image: url(spritesmith-main-5.png); - background-position: -1107px -1542px; + background-position: -369px -1561px; width: 40px; height: 40px; } .shop_shield_rogue_3 { background-image: url(spritesmith-main-5.png); - background-position: -1148px -1542px; + background-position: -410px -1561px; width: 40px; height: 40px; } .shop_shield_rogue_4 { background-image: url(spritesmith-main-5.png); - background-position: -1189px -1542px; + background-position: -451px -1561px; width: 40px; height: 40px; } .shop_shield_rogue_5 { background-image: url(spritesmith-main-5.png); - background-position: -1230px -1542px; + background-position: -492px -1561px; width: 40px; height: 40px; } .shop_shield_rogue_6 { background-image: url(spritesmith-main-5.png); - background-position: -1271px -1542px; + background-position: -533px -1561px; width: 40px; height: 40px; } .shop_shield_special_0 { background-image: url(spritesmith-main-5.png); - background-position: -1312px -1542px; + background-position: -574px -1561px; width: 40px; height: 40px; } .shop_shield_special_1 { background-image: url(spritesmith-main-5.png); - background-position: -1353px -1542px; + background-position: -615px -1561px; width: 40px; height: 40px; } .shop_shield_special_goldenknight { background-image: url(spritesmith-main-5.png); - background-position: -1394px -1542px; + background-position: -656px -1561px; width: 40px; height: 40px; } .shop_shield_special_moonpearlShield { background-image: url(spritesmith-main-5.png); - background-position: -1435px -1542px; + background-position: -697px -1561px; width: 40px; height: 40px; } .shop_shield_warrior_1 { background-image: url(spritesmith-main-5.png); - background-position: -1476px -1542px; + background-position: -738px -1561px; width: 40px; height: 40px; } .shop_shield_warrior_2 { background-image: url(spritesmith-main-5.png); - background-position: -1517px -1542px; + background-position: -779px -1561px; width: 40px; height: 40px; } .shop_shield_warrior_3 { background-image: url(spritesmith-main-5.png); - background-position: -1558px -1542px; + background-position: -820px -1561px; width: 40px; height: 40px; } .shop_shield_warrior_4 { background-image: url(spritesmith-main-5.png); - background-position: -1599px -1542px; + background-position: -1404px -1274px; width: 40px; height: 40px; } .shop_shield_warrior_5 { background-image: url(spritesmith-main-5.png); - background-position: 0px -1583px; + background-position: -902px -1561px; width: 40px; height: 40px; } .shop_weapon_healer_0 { background-image: url(spritesmith-main-5.png); - background-position: -41px -1583px; + background-position: -943px -1561px; width: 40px; height: 40px; } .shop_weapon_healer_1 { background-image: url(spritesmith-main-5.png); - background-position: -82px -1583px; + background-position: -984px -1561px; width: 40px; height: 40px; } .shop_weapon_healer_2 { background-image: url(spritesmith-main-5.png); - background-position: -123px -1583px; + background-position: -1025px -1561px; width: 40px; height: 40px; } .shop_weapon_healer_3 { background-image: url(spritesmith-main-5.png); - background-position: -1682px -246px; + background-position: -1066px -1561px; width: 40px; height: 40px; } .shop_weapon_healer_4 { background-image: url(spritesmith-main-5.png); - background-position: -205px -1583px; + background-position: -1107px -1561px; width: 40px; height: 40px; } .shop_weapon_healer_5 { background-image: url(spritesmith-main-5.png); - background-position: -246px -1583px; + background-position: -1148px -1561px; width: 40px; height: 40px; } .shop_weapon_healer_6 { background-image: url(spritesmith-main-5.png); - background-position: -287px -1583px; + background-position: -1189px -1561px; width: 40px; height: 40px; } .shop_weapon_rogue_0 { background-image: url(spritesmith-main-5.png); - background-position: -328px -1583px; + background-position: -1230px -1561px; width: 40px; height: 40px; } .shop_weapon_rogue_1 { background-image: url(spritesmith-main-5.png); - background-position: -369px -1583px; + background-position: -1271px -1561px; width: 40px; height: 40px; } .shop_weapon_rogue_2 { background-image: url(spritesmith-main-5.png); - background-position: -410px -1583px; + background-position: -1312px -1561px; width: 40px; height: 40px; } .shop_weapon_rogue_3 { background-image: url(spritesmith-main-5.png); - background-position: -451px -1583px; + background-position: -1353px -1561px; width: 40px; height: 40px; } .shop_weapon_rogue_4 { background-image: url(spritesmith-main-5.png); - background-position: -492px -1583px; + background-position: -1394px -1561px; width: 40px; height: 40px; } .shop_weapon_rogue_5 { background-image: url(spritesmith-main-5.png); - background-position: -533px -1583px; + background-position: -1435px -1561px; width: 40px; height: 40px; } .shop_weapon_rogue_6 { background-image: url(spritesmith-main-5.png); - background-position: -574px -1583px; + background-position: -1476px -1561px; width: 40px; height: 40px; } .shop_weapon_special_0 { background-image: url(spritesmith-main-5.png); - background-position: -615px -1583px; + background-position: -1517px -1561px; width: 40px; height: 40px; } .shop_weapon_special_1 { background-image: url(spritesmith-main-5.png); - background-position: -656px -1583px; + background-position: -1558px -1561px; width: 40px; height: 40px; } .shop_weapon_special_2 { background-image: url(spritesmith-main-5.png); - background-position: -697px -1583px; + background-position: -1627px 0px; width: 40px; height: 40px; } .shop_weapon_special_3 { background-image: url(spritesmith-main-5.png); - background-position: -738px -1583px; + background-position: -1627px -41px; width: 40px; height: 40px; } .shop_weapon_special_critical { background-image: url(spritesmith-main-5.png); - background-position: -779px -1583px; + background-position: -1627px -82px; width: 40px; height: 40px; } .shop_weapon_special_tridentOfCrashingTides { background-image: url(spritesmith-main-5.png); - background-position: -820px -1583px; + background-position: -1627px -123px; width: 40px; height: 40px; } .shop_weapon_warrior_0 { background-image: url(spritesmith-main-5.png); - background-position: -861px -1583px; + background-position: -1627px -164px; width: 40px; height: 40px; } .shop_weapon_warrior_1 { background-image: url(spritesmith-main-5.png); - background-position: -902px -1583px; + background-position: -1627px -205px; width: 40px; height: 40px; } .shop_weapon_warrior_2 { background-image: url(spritesmith-main-5.png); - background-position: -943px -1583px; + background-position: -1627px -246px; width: 40px; height: 40px; } .shop_weapon_warrior_3 { background-image: url(spritesmith-main-5.png); - background-position: -984px -1583px; + background-position: -1627px -287px; width: 40px; height: 40px; } .shop_weapon_warrior_4 { background-image: url(spritesmith-main-5.png); - background-position: -1025px -1583px; + background-position: -1627px -328px; width: 40px; height: 40px; } .shop_weapon_warrior_5 { background-image: url(spritesmith-main-5.png); - background-position: -1066px -1583px; + background-position: -1627px -369px; width: 40px; height: 40px; } .shop_weapon_warrior_6 { background-image: url(spritesmith-main-5.png); - background-position: -1107px -1583px; + background-position: -1627px -410px; width: 40px; height: 40px; } .shop_weapon_wizard_0 { background-image: url(spritesmith-main-5.png); - background-position: -1148px -1583px; + background-position: -1627px -451px; width: 40px; height: 40px; } .shop_weapon_wizard_1 { background-image: url(spritesmith-main-5.png); - background-position: -1189px -1583px; + background-position: -1627px -492px; width: 40px; height: 40px; } .shop_weapon_wizard_2 { background-image: url(spritesmith-main-5.png); - background-position: -1230px -1583px; + background-position: -1627px -533px; width: 40px; height: 40px; } .shop_weapon_wizard_3 { background-image: url(spritesmith-main-5.png); - background-position: -1271px -1583px; + background-position: -1627px -574px; width: 40px; height: 40px; } .shop_weapon_wizard_4 { background-image: url(spritesmith-main-5.png); - background-position: -1312px -1583px; + background-position: -1627px -615px; width: 40px; height: 40px; } .shop_weapon_wizard_5 { background-image: url(spritesmith-main-5.png); - background-position: -1353px -1583px; + background-position: -1627px -656px; width: 40px; height: 40px; } .shop_weapon_wizard_6 { background-image: url(spritesmith-main-5.png); - background-position: -1394px -1583px; + background-position: -1627px -697px; width: 40px; height: 40px; } .weapon_healer_0 { background-image: url(spritesmith-main-5.png); - background-position: -464px -944px; + background-position: -1037px -819px; width: 90px; height: 90px; } .weapon_healer_1 { background-image: url(spritesmith-main-5.png); - background-position: -373px -944px; + background-position: -1037px -728px; width: 90px; height: 90px; } .weapon_healer_2 { background-image: url(spritesmith-main-5.png); - background-position: -282px -944px; + background-position: -1037px -637px; width: 90px; height: 90px; } .weapon_healer_3 { background-image: url(spritesmith-main-5.png); - background-position: -901px -742px; + background-position: -1037px -546px; width: 90px; height: 90px; } .weapon_healer_4 { background-image: url(spritesmith-main-5.png); - background-position: -1274px -1399px; + background-position: -546px -1415px; width: 90px; height: 90px; } .weapon_healer_5 { background-image: url(spritesmith-main-5.png); - background-position: -1092px -1399px; + background-position: -364px -1415px; width: 90px; height: 90px; } .weapon_healer_6 { background-image: url(spritesmith-main-5.png); - background-position: -182px -1399px; + background-position: -1495px -819px; width: 90px; height: 90px; } .weapon_rogue_0 { background-image: url(spritesmith-main-5.png); - background-position: 0px -1399px; + background-position: -1495px -637px; width: 90px; height: 90px; } .weapon_rogue_1 { background-image: url(spritesmith-main-5.png); - background-position: -1092px -1217px; + background-position: -1365px -1324px; width: 90px; height: 90px; } .weapon_rogue_2 { background-image: url(spritesmith-main-5.png); - background-position: -1001px -1217px; + background-position: -1313px -1092px; width: 90px; height: 90px; } .weapon_rogue_3 { background-image: url(spritesmith-main-5.png); - background-position: -910px -1217px; + background-position: -1313px -728px; width: 90px; height: 90px; } .weapon_rogue_4 { background-image: url(spritesmith-main-5.png); - background-position: -819px -1217px; + background-position: -1313px -546px; width: 90px; height: 90px; } .weapon_rogue_5 { background-image: url(spritesmith-main-5.png); - background-position: -728px -1217px; + background-position: -1313px -273px; width: 90px; height: 90px; } .weapon_rogue_6 { background-image: url(spritesmith-main-5.png); - background-position: -637px -1217px; + background-position: -1092px -1142px; width: 90px; height: 90px; } .weapon_special_1 { background-image: url(spritesmith-main-5.png); - background-position: -992px 0px; + background-position: -313px -869px; width: 102px; height: 90px; } .weapon_special_2 { background-image: url(spritesmith-main-5.png); - background-position: -91px -1217px; + background-position: -1222px -819px; width: 90px; height: 90px; } .weapon_special_3 { background-image: url(spritesmith-main-5.png); - background-position: -1277px -1001px; + background-position: -1222px -637px; width: 90px; height: 90px; } .weapon_special_tridentOfCrashingTides { background-image: url(spritesmith-main-5.png); - background-position: -1277px -546px; + background-position: -1092px -1051px; width: 90px; height: 90px; } .weapon_warrior_0 { background-image: url(spritesmith-main-5.png); - background-position: -1277px -364px; + background-position: -1001px -1051px; width: 90px; height: 90px; } .weapon_warrior_1 { background-image: url(spritesmith-main-5.png); - background-position: -455px -1126px; + background-position: -910px -1051px; width: 90px; height: 90px; } .weapon_warrior_2 { background-image: url(spritesmith-main-5.png); - background-position: -273px -1126px; + background-position: -819px -1051px; width: 90px; height: 90px; } .weapon_warrior_3 { background-image: url(spritesmith-main-5.png); - background-position: -1186px -546px; + background-position: -728px -1051px; width: 90px; height: 90px; } .weapon_warrior_4 { background-image: url(spritesmith-main-5.png); - background-position: -1186px -91px; + background-position: -546px -1051px; width: 90px; height: 90px; } .weapon_warrior_5 { background-image: url(spritesmith-main-5.png); - background-position: -910px -1035px; + background-position: -182px -1051px; width: 90px; height: 90px; } .weapon_warrior_6 { background-image: url(spritesmith-main-5.png); - background-position: -819px -1035px; + background-position: -91px -1051px; width: 90px; height: 90px; } .weapon_wizard_0 { background-image: url(spritesmith-main-5.png); - background-position: -728px -1035px; + background-position: 0px -1051px; width: 90px; height: 90px; } .weapon_wizard_1 { background-image: url(spritesmith-main-5.png); - background-position: -637px -1035px; + background-position: -1131px -910px; width: 90px; height: 90px; } .weapon_wizard_2 { background-image: url(spritesmith-main-5.png); - background-position: -546px -1035px; + background-position: -1131px -819px; width: 90px; height: 90px; } .weapon_wizard_3 { background-image: url(spritesmith-main-5.png); - background-position: -455px -1035px; + background-position: -1131px -728px; width: 90px; height: 90px; } .weapon_wizard_4 { background-image: url(spritesmith-main-5.png); - background-position: -364px -1035px; + background-position: -1131px -637px; width: 90px; height: 90px; } .weapon_wizard_5 { background-image: url(spritesmith-main-5.png); - background-position: -91px -1035px; + background-position: -1131px -364px; width: 90px; height: 90px; } .weapon_wizard_6 { background-image: url(spritesmith-main-5.png); - background-position: 0px -1035px; + background-position: -1131px -273px; width: 90px; height: 90px; } .GrimReaper { background-image: url(spritesmith-main-5.png); - background-position: -1550px -1194px; + background-position: -569px -493px; width: 57px; height: 66px; } .Pet_Currency_Gem { background-image: url(spritesmith-main-5.png); - background-position: -447px -384px; + background-position: -1495px -1365px; width: 45px; height: 39px; } .Pet_Currency_Gem1x { background-image: url(spritesmith-main-5.png); - background-position: -1682px -354px; + background-position: -1668px -1133px; width: 15px; height: 13px; } .Pet_Currency_Gem2x { background-image: url(spritesmith-main-5.png); - background-position: -1682px -327px; + background-position: -1668px -1106px; width: 30px; height: 26px; } .PixelPaw-Gold { background-image: url(spritesmith-main-5.png); - background-position: -847px -688px; + background-position: -528px -439px; width: 51px; height: 51px; } .PixelPaw { background-image: url(spritesmith-main-5.png); - background-position: -713px -576px; + background-position: -580px -1506px; width: 51px; height: 51px; } .PixelPaw002 { background-image: url(spritesmith-main-5.png); - background-position: -392px -151px; + background-position: -632px -1506px; width: 51px; height: 51px; } .avatar_floral_healer { background-image: url(spritesmith-main-5.png); - background-position: -789px -182px; + background-position: -743px -91px; width: 99px; height: 99px; } .avatar_floral_rogue { background-image: url(spritesmith-main-5.png); - background-position: -789px -482px; + background-position: -743px -191px; width: 99px; height: 99px; } .avatar_floral_warrior { background-image: url(spritesmith-main-5.png); - background-position: -789px -382px; + background-position: -743px -391px; width: 99px; height: 99px; } .avatar_floral_wizard { background-image: url(spritesmith-main-5.png); - background-position: -789px -282px; + background-position: -743px -291px; width: 99px; height: 99px; } .empty_bottles { background-image: url(spritesmith-main-5.png); - background-position: -1550px -1261px; + background-position: -672px -584px; width: 64px; height: 54px; } .ghost { background-image: url(spritesmith-main-5.png); - background-position: -1095px -364px; + background-position: -728px -960px; width: 90px; height: 90px; } .inventory_present { background-image: url(spritesmith-main-5.png); - background-position: -441px -1490px; + background-position: -1272px -1506px; width: 48px; height: 51px; } .inventory_present_01 { background-image: url(spritesmith-main-5.png); - background-position: -490px -1490px; + background-position: -1125px -1506px; width: 48px; height: 51px; } .inventory_present_02 { background-image: url(spritesmith-main-5.png); - background-position: -294px -1490px; + background-position: -1174px -1506px; width: 48px; height: 51px; } .inventory_present_03 { background-image: url(spritesmith-main-5.png); - background-position: -343px -1490px; + background-position: -1076px -1506px; width: 48px; height: 51px; } .inventory_present_04 { background-image: url(spritesmith-main-5.png); - background-position: -245px -1490px; + background-position: -1027px -1506px; width: 48px; height: 51px; } .inventory_present_05 { background-image: url(spritesmith-main-5.png); - background-position: -196px -1490px; + background-position: -804px -597px; width: 48px; height: 51px; } .inventory_present_06 { background-image: url(spritesmith-main-5.png); - background-position: -539px -1490px; + background-position: -880px -1506px; width: 48px; height: 51px; } .inventory_present_07 { background-image: url(spritesmith-main-5.png); - background-position: -49px -1490px; + background-position: -831px -1506px; width: 48px; height: 51px; } .inventory_present_08 { background-image: url(spritesmith-main-5.png); - background-position: 0px -1490px; + background-position: -782px -1506px; width: 48px; height: 51px; } .inventory_present_09 { background-image: url(spritesmith-main-5.png); - background-position: -1010px -944px; + background-position: -733px -1506px; width: 48px; height: 51px; } .inventory_present_10 { background-image: url(spritesmith-main-5.png); - background-position: -527px -481px; + background-position: -684px -1506px; width: 48px; height: 51px; } .inventory_present_11 { background-image: url(spritesmith-main-5.png); - background-position: -527px -429px; + background-position: -580px -439px; width: 48px; height: 51px; } .inventory_present_12 { background-image: url(spritesmith-main-5.png); - background-position: -392px -203px; + background-position: -1321px -1506px; width: 48px; height: 51px; } .inventory_quest_scroll { background-image: url(spritesmith-main-5.png); - background-position: -98px -1490px; + background-position: -929px -1506px; width: 48px; height: 51px; } .inventory_quest_scroll_locked { background-image: url(spritesmith-main-5.png); - background-position: -392px -1490px; + background-position: -1223px -1506px; width: 48px; height: 51px; } .inventory_special_birthday { background-image: url(spritesmith-main-5.png); - background-position: -1550px -1371px; + background-position: -1514px -1415px; width: 57px; height: 54px; } .inventory_special_fortify { background-image: url(spritesmith-main-5.png); - background-position: -713px -521px; + background-position: -464px -1506px; width: 57px; height: 54px; } .inventory_special_greeting { background-image: url(spritesmith-main-5.png); - background-position: -713px -411px; + background-position: -406px -1506px; width: 57px; height: 54px; } .inventory_special_nye { background-image: url(spritesmith-main-5.png); - background-position: -713px -356px; + background-position: -348px -1506px; width: 57px; height: 54px; } .inventory_special_opaquePotion { background-image: url(spritesmith-main-5.png); - background-position: -574px -1624px; + background-position: -1517px -1602px; width: 40px; height: 40px; } .inventory_special_seafoam { background-image: url(spritesmith-main-5.png); - background-position: -713px -301px; + background-position: -290px -1506px; width: 57px; height: 54px; } .inventory_special_shinySeed { background-image: url(spritesmith-main-5.png); - background-position: -713px -246px; + background-position: -232px -1506px; width: 57px; height: 54px; } .inventory_special_snowball { background-image: url(spritesmith-main-5.png); - background-position: -713px -191px; + background-position: -174px -1506px; width: 57px; height: 54px; } .inventory_special_spookySparkles { background-image: url(spritesmith-main-5.png); - background-position: -713px -136px; + background-position: -116px -1506px; width: 57px; height: 54px; } .inventory_special_thankyou { background-image: url(spritesmith-main-5.png); - background-position: -789px -688px; + background-position: -58px -1506px; width: 57px; height: 54px; } .inventory_special_trinket { background-image: url(spritesmith-main-5.png); - background-position: -147px -1490px; + background-position: -978px -1506px; width: 48px; height: 51px; } .inventory_special_valentine { background-image: url(spritesmith-main-5.png); - background-position: -1550px -1426px; + background-position: 0px -1506px; width: 57px; height: 54px; } .knockout { background-image: url(spritesmith-main-5.png); - background-position: -115px -750px; + background-position: -115px -675px; width: 120px; height: 47px; } .pet_key { background-image: url(spritesmith-main-5.png); - background-position: -1550px -1316px; + background-position: -1456px -1415px; width: 57px; height: 54px; } .rebirth_orb { background-image: url(spritesmith-main-5.png); - background-position: -713px -466px; + background-position: -522px -1506px; width: 57px; height: 54px; } .seafoam_star { background-image: url(spritesmith-main-5.png); - background-position: -1095px -273px; + background-position: -637px -960px; width: 90px; height: 90px; } .shop_armoire { background-image: url(spritesmith-main-5.png); - background-position: -1312px -1624px; + background-position: -1668px -615px; width: 40px; height: 40px; } .snowman { background-image: url(spritesmith-main-5.png); - background-position: -1095px -182px; + background-position: -546px -960px; width: 90px; height: 90px; } .zzz { background-image: url(spritesmith-main-5.png); - background-position: -1435px -1624px; + background-position: -1668px -738px; width: 40px; height: 40px; } .zzz_light { background-image: url(spritesmith-main-5.png); - background-position: -1394px -1624px; + background-position: -1668px -697px; width: 40px; height: 40px; } .npc_alex { background-image: url(spritesmith-main-5.png); - background-position: 0px -290px; + background-position: -196px -139px; width: 162px; height: 138px; } .npc_aprilFool { background-image: url(spritesmith-main-5.png); - background-position: -447px -263px; + background-position: -392px -124px; width: 120px; height: 120px; } .npc_bailey { background-image: url(spritesmith-main-5.png); - background-position: -1550px -1092px; - width: 71px; - height: 101px; + background-position: -743px -597px; + width: 60px; + height: 72px; } .npc_daniel { background-image: url(spritesmith-main-5.png); - background-position: -447px -139px; + background-position: -392px 0px; width: 135px; height: 123px; } -.npc_ian { - background-image: url(spritesmith-main-5.png); - background-position: -713px 0px; - width: 75px; - height: 135px; -} .npc_justin { background-image: url(spritesmith-main-5.png); - background-position: 0px -629px; + background-position: -528px -212px; width: 84px; height: 120px; } .npc_justin_head { background-image: url(spritesmith-main-5.png); - background-position: -1682px -287px; + background-position: -1668px -1066px; width: 36px; height: 39px; } .npc_matt { background-image: url(spritesmith-main-5.png); - background-position: -251px 0px; + background-position: -196px 0px; width: 195px; height: 138px; } .npc_sabe { background-image: url(spritesmith-main-5.png); - background-position: -1095px -546px; + background-position: -1131px 0px; width: 90px; height: 90px; } .npc_timetravelers { background-image: url(spritesmith-main-5.png); - background-position: -196px -151px; + background-position: 0px 0px; width: 195px; height: 138px; } .npc_timetravelers_active { background-image: url(spritesmith-main-5.png); - background-position: 0px -151px; + background-position: 0px -139px; width: 195px; height: 138px; } -.npc_tyler { - background-image: url(spritesmith-main-5.png); - background-position: -1095px 0px; - width: 90px; - height: 90px; -} -.seasonalshop_closed { - background-image: url(spritesmith-main-5.png); - background-position: -163px -290px; - width: 162px; - height: 138px; -} -.seasonalshop_open { - background-image: url(spritesmith-main-5.png); - background-position: -447px 0px; - width: 162px; - height: 138px; -} -.quest_atom1 { - background-image: url(spritesmith-main-5.png); - background-position: 0px 0px; - width: 250px; - height: 150px; -} diff --git a/common/dist/sprites/spritesmith-main-5.png b/common/dist/sprites/spritesmith-main-5.png index 8445c192b7..388d21ee54 100644 Binary files a/common/dist/sprites/spritesmith-main-5.png and b/common/dist/sprites/spritesmith-main-5.png differ diff --git a/common/dist/sprites/spritesmith-main-6.css b/common/dist/sprites/spritesmith-main-6.css index 56ecbb9135..0eb6cb0dcf 100644 --- a/common/dist/sprites/spritesmith-main-6.css +++ b/common/dist/sprites/spritesmith-main-6.css @@ -1,9 +1,33 @@ +.npc_tyler { + background-image: url(spritesmith-main-6.png); + background-position: -1656px -1247px; + width: 90px; + height: 90px; +} +.seasonalshop_closed { + background-image: url(spritesmith-main-6.png); + background-position: -1537px -969px; + width: 162px; + height: 138px; +} +.seasonalshop_open { + background-image: url(spritesmith-main-6.png); + background-position: -1537px -1108px; + width: 162px; + height: 138px; +} .quest_TEMPLATE_FOR_MISSING_IMAGE { background-image: url(spritesmith-main-6.png); - background-position: -1163px -1432px; + background-position: 0px -1504px; width: 221px; height: 39px; } +.quest_atom1 { + background-image: url(spritesmith-main-6.png); + background-position: -719px -1326px; + width: 250px; + height: 150px; +} .quest_atom2 { background-image: url(spritesmith-main-6.png); background-position: -1537px -537px; @@ -18,7 +42,7 @@ } .quest_axolotl { background-image: url(spritesmith-main-6.png); - background-position: 0px -892px; + background-position: -220px -232px; width: 219px; height: 219px; } @@ -36,13 +60,13 @@ } .quest_cheetah { background-image: url(spritesmith-main-6.png); - background-position: -440px 0px; + background-position: -660px -220px; width: 219px; height: 219px; } .quest_dilatory { background-image: url(spritesmith-main-6.png); - background-position: -220px -232px; + background-position: -220px -452px; width: 219px; height: 219px; } @@ -60,37 +84,37 @@ } .quest_dilatoryDistress3 { background-image: url(spritesmith-main-6.png); - background-position: -660px -220px; + background-position: -880px 0px; width: 219px; height: 219px; } .quest_dilatory_derby { background-image: url(spritesmith-main-6.png); - background-position: 0px -232px; + background-position: 0px -452px; width: 219px; height: 219px; } .quest_egg { background-image: url(spritesmith-main-6.png); - background-position: -719px -1432px; + background-position: -1192px -1432px; width: 221px; height: 39px; } .quest_evilsanta { background-image: url(spritesmith-main-6.png); - background-position: -1537px -969px; + background-position: -1537px -1247px; width: 118px; height: 131px; } .quest_evilsanta2 { background-image: url(spritesmith-main-6.png); - background-position: -220px -452px; + background-position: 0px -672px; width: 219px; height: 219px; } .quest_falcon { background-image: url(spritesmith-main-6.png); - background-position: -440px -452px; + background-position: -220px -672px; width: 219px; height: 219px; } @@ -102,13 +126,13 @@ } .quest_ghost_stag { background-image: url(spritesmith-main-6.png); - background-position: -880px 0px; + background-position: -660px -672px; width: 219px; height: 219px; } .quest_goldenknight1 { background-image: url(spritesmith-main-6.png); - background-position: -941px -1432px; + background-position: -970px -1432px; width: 221px; height: 39px; } @@ -126,13 +150,13 @@ } .quest_gryphon { background-image: url(spritesmith-main-6.png); - background-position: -880px -1112px; + background-position: -1097px -1112px; width: 216px; height: 177px; } .quest_harpy { background-image: url(spritesmith-main-6.png); - background-position: -880px -440px; + background-position: -1100px -660px; width: 219px; height: 219px; } @@ -144,37 +168,37 @@ } .quest_horse { background-image: url(spritesmith-main-6.png); - background-position: -660px -672px; + background-position: -220px -892px; width: 219px; height: 219px; } .quest_kraken { background-image: url(spritesmith-main-6.png); - background-position: -663px -1112px; + background-position: 0px -1326px; width: 216px; height: 177px; } .quest_monkey { background-image: url(spritesmith-main-6.png); - background-position: -1100px 0px; + background-position: -660px -892px; width: 219px; height: 219px; } .quest_moonstone1 { background-image: url(spritesmith-main-6.png); - background-position: -1100px -220px; + background-position: -440px -892px; width: 219px; height: 219px; } .quest_moonstone2 { background-image: url(spritesmith-main-6.png); - background-position: -1100px -440px; + background-position: 0px -892px; width: 219px; height: 219px; } .quest_moonstone3 { background-image: url(spritesmith-main-6.png); - background-position: -1100px -660px; + background-position: -1100px -440px; width: 219px; height: 219px; } @@ -186,7 +210,7 @@ } .quest_owl { background-image: url(spritesmith-main-6.png); - background-position: -220px -892px; + background-position: -220px 0px; width: 219px; height: 219px; } @@ -198,7 +222,7 @@ } .quest_rat { background-image: url(spritesmith-main-6.png); - background-position: -660px -452px; + background-position: -1100px 0px; width: 219px; height: 219px; } @@ -222,13 +246,13 @@ } .quest_sheep { background-image: url(spritesmith-main-6.png); - background-position: -440px -232px; + background-position: -880px -440px; width: 219px; height: 219px; } .quest_slime { background-image: url(spritesmith-main-6.png); - background-position: 0px -672px; + background-position: -660px -452px; width: 219px; height: 219px; } @@ -252,31 +276,31 @@ } .quest_stressbeast { background-image: url(spritesmith-main-6.png); - background-position: -220px 0px; + background-position: 0px -232px; width: 219px; height: 219px; } .quest_stressbeast_bailey { background-image: url(spritesmith-main-6.png); - background-position: -660px -892px; + background-position: -440px -452px; width: 219px; height: 219px; } .quest_stressbeast_guide { background-image: url(spritesmith-main-6.png); - background-position: -440px -892px; + background-position: -660px 0px; width: 219px; height: 219px; } .quest_stressbeast_stables { background-image: url(spritesmith-main-6.png); - background-position: -880px -672px; + background-position: -440px -232px; width: 219px; height: 219px; } .quest_treeling { background-image: url(spritesmith-main-6.png); - background-position: -1097px -1112px; + background-position: -880px -1112px; width: 216px; height: 177px; } @@ -288,31 +312,31 @@ } .quest_trex_undead { background-image: url(spritesmith-main-6.png); - background-position: -1314px -1112px; + background-position: -663px -1112px; width: 216px; height: 177px; } .quest_turtle { background-image: url(spritesmith-main-6.png); - background-position: -880px -220px; + background-position: -440px 0px; width: 219px; height: 219px; } .quest_unicorn { background-image: url(spritesmith-main-6.png); - background-position: 0px -452px; + background-position: -1100px -220px; width: 219px; height: 219px; } .quest_vice1 { background-image: url(spritesmith-main-6.png); - background-position: 0px -1326px; + background-position: -1314px -1112px; width: 216px; height: 177px; } .quest_vice2 { background-image: url(spritesmith-main-6.png); - background-position: -660px 0px; + background-position: -880px -672px; width: 219px; height: 219px; } @@ -324,79 +348,79 @@ } .quest_whale { background-image: url(spritesmith-main-6.png); - background-position: -220px -672px; + background-position: -880px -220px; width: 219px; height: 219px; } .quest_dilatoryDistress1_blueFins { background-image: url(spritesmith-main-6.png); - background-position: -947px -1556px; + background-position: -833px -1596px; width: 51px; height: 48px; } .quest_dilatoryDistress1_fireCoral { background-image: url(spritesmith-main-6.png); - background-position: 0px -1610px; + background-position: 0px -1648px; width: 48px; height: 51px; } .quest_egg_plainEgg { background-image: url(spritesmith-main-6.png); - background-position: -49px -1610px; + background-position: -49px -1648px; width: 48px; height: 51px; } .quest_goldenknight1_testimony { background-image: url(spritesmith-main-6.png); - background-position: -98px -1610px; + background-position: -98px -1648px; width: 48px; height: 51px; } .quest_moonstone1_moonstone { background-image: url(spritesmith-main-6.png); - background-position: -1751px -1600px; + background-position: -1320px -1080px; width: 30px; height: 30px; } .quest_vice2_lightCrystal { background-image: url(spritesmith-main-6.png); - background-position: -1751px -1386px; + background-position: -84px -1700px; width: 40px; height: 40px; } .inventory_quest_scroll_atom1 { background-image: url(spritesmith-main-6.png); - background-position: -196px -1610px; + background-position: -294px -1596px; width: 48px; height: 51px; } .inventory_quest_scroll_atom1_locked { background-image: url(spritesmith-main-6.png); - background-position: -147px -1610px; + background-position: -147px -1648px; width: 48px; height: 51px; } .inventory_quest_scroll_atom2 { background-image: url(spritesmith-main-6.png); - background-position: -294px -1610px; + background-position: -1029px -1648px; width: 48px; height: 51px; } .inventory_quest_scroll_atom2_locked { background-image: url(spritesmith-main-6.png); - background-position: -245px -1610px; + background-position: -1688px -871px; width: 48px; height: 51px; } .inventory_quest_scroll_atom3 { background-image: url(spritesmith-main-6.png); - background-position: -392px -1610px; + background-position: -1700px -1021px; width: 48px; height: 51px; } .inventory_quest_scroll_atom3_locked { background-image: url(spritesmith-main-6.png); - background-position: -343px -1610px; + background-position: -1700px -969px; width: 48px; height: 51px; } @@ -408,1039 +432,985 @@ } .inventory_quest_scroll_basilist { background-image: url(spritesmith-main-6.png); - background-position: -555px -1556px; + background-position: -1700px -1160px; width: 48px; height: 51px; } .inventory_quest_scroll_bunny { background-image: url(spritesmith-main-6.png); - background-position: -800px -1556px; + background-position: -1394px -1326px; width: 48px; height: 51px; } .inventory_quest_scroll_cheetah { background-image: url(spritesmith-main-6.png); - background-position: -1274px -1610px; + background-position: -1443px -1326px; width: 48px; height: 51px; } .inventory_quest_scroll_dilatoryDistress1 { background-image: url(spritesmith-main-6.png); - background-position: -898px -1556px; + background-position: -1443px -1378px; width: 48px; height: 51px; } .inventory_quest_scroll_dilatoryDistress2 { background-image: url(spritesmith-main-6.png); - background-position: -1656px -969px; + background-position: -49px -1544px; width: 48px; height: 51px; } .inventory_quest_scroll_dilatoryDistress2_locked { background-image: url(spritesmith-main-6.png); - background-position: -441px -1610px; + background-position: 0px -1544px; width: 48px; height: 51px; } .inventory_quest_scroll_dilatoryDistress3 { background-image: url(spritesmith-main-6.png); - background-position: -1537px -1419px; + background-position: -147px -1544px; width: 48px; height: 51px; } .inventory_quest_scroll_dilatoryDistress3_locked { background-image: url(spritesmith-main-6.png); - background-position: -1656px -1021px; + background-position: -98px -1544px; width: 48px; height: 51px; } .inventory_quest_scroll_dilatory_derby { background-image: url(spritesmith-main-6.png); - background-position: -849px -1556px; + background-position: -1394px -1378px; width: 48px; height: 51px; } .inventory_quest_scroll_egg { background-image: url(spritesmith-main-6.png); - background-position: -1586px -1419px; + background-position: -196px -1544px; width: 48px; height: 51px; } .inventory_quest_scroll_evilsanta { background-image: url(spritesmith-main-6.png); - background-position: -1635px -1419px; + background-position: -245px -1544px; width: 48px; height: 51px; } .inventory_quest_scroll_evilsanta2 { background-image: url(spritesmith-main-6.png); - background-position: -1684px -1419px; + background-position: -294px -1544px; width: 48px; height: 51px; } .inventory_quest_scroll_falcon { background-image: url(spritesmith-main-6.png); - background-position: -1461px -1326px; + background-position: -343px -1544px; width: 48px; height: 51px; } .inventory_quest_scroll_frog { background-image: url(spritesmith-main-6.png); - background-position: -1461px -1378px; + background-position: -392px -1544px; width: 48px; height: 51px; } .inventory_quest_scroll_ghost_stag { background-image: url(spritesmith-main-6.png); - background-position: -212px -1504px; + background-position: -441px -1544px; width: 48px; height: 51px; } .inventory_quest_scroll_goldenknight1 { background-image: url(spritesmith-main-6.png); - background-position: -310px -1504px; + background-position: -539px -1544px; width: 48px; height: 51px; } .inventory_quest_scroll_goldenknight1_locked { background-image: url(spritesmith-main-6.png); - background-position: -261px -1504px; + background-position: -490px -1544px; width: 48px; height: 51px; } .inventory_quest_scroll_goldenknight2 { background-image: url(spritesmith-main-6.png); - background-position: -408px -1504px; + background-position: -637px -1544px; width: 48px; height: 51px; } .inventory_quest_scroll_goldenknight2_locked { background-image: url(spritesmith-main-6.png); - background-position: -359px -1504px; + background-position: -588px -1544px; width: 48px; height: 51px; } .inventory_quest_scroll_goldenknight3 { background-image: url(spritesmith-main-6.png); - background-position: -506px -1504px; + background-position: -735px -1544px; width: 48px; height: 51px; } .inventory_quest_scroll_goldenknight3_locked { background-image: url(spritesmith-main-6.png); - background-position: -457px -1504px; + background-position: -686px -1544px; width: 48px; height: 51px; } .inventory_quest_scroll_gryphon { background-image: url(spritesmith-main-6.png); - background-position: -555px -1504px; + background-position: -784px -1544px; width: 48px; height: 51px; } .inventory_quest_scroll_harpy { background-image: url(spritesmith-main-6.png); - background-position: -604px -1504px; + background-position: -833px -1544px; width: 48px; height: 51px; } .inventory_quest_scroll_hedgehog { background-image: url(spritesmith-main-6.png); - background-position: -653px -1504px; + background-position: -882px -1544px; width: 48px; height: 51px; } .inventory_quest_scroll_horse { background-image: url(spritesmith-main-6.png); - background-position: -702px -1504px; + background-position: -931px -1544px; width: 48px; height: 51px; } .inventory_quest_scroll_kraken { background-image: url(spritesmith-main-6.png); - background-position: -751px -1504px; + background-position: -980px -1544px; width: 48px; height: 51px; } .inventory_quest_scroll_monkey { background-image: url(spritesmith-main-6.png); - background-position: -800px -1504px; + background-position: -1029px -1544px; width: 48px; height: 51px; } .inventory_quest_scroll_moonstone1 { background-image: url(spritesmith-main-6.png); - background-position: -898px -1504px; + background-position: -1127px -1544px; width: 48px; height: 51px; } .inventory_quest_scroll_moonstone1_locked { background-image: url(spritesmith-main-6.png); - background-position: -849px -1504px; + background-position: -1078px -1544px; width: 48px; height: 51px; } .inventory_quest_scroll_moonstone2 { background-image: url(spritesmith-main-6.png); - background-position: -996px -1504px; + background-position: -1225px -1544px; width: 48px; height: 51px; } .inventory_quest_scroll_moonstone2_locked { background-image: url(spritesmith-main-6.png); - background-position: -947px -1504px; + background-position: -1176px -1544px; width: 48px; height: 51px; } .inventory_quest_scroll_moonstone3 { background-image: url(spritesmith-main-6.png); - background-position: -1094px -1504px; + background-position: -1323px -1544px; width: 48px; height: 51px; } .inventory_quest_scroll_moonstone3_locked { background-image: url(spritesmith-main-6.png); - background-position: -1045px -1504px; + background-position: -1274px -1544px; width: 48px; height: 51px; } .inventory_quest_scroll_octopus { background-image: url(spritesmith-main-6.png); - background-position: -1143px -1504px; + background-position: -1372px -1544px; width: 48px; height: 51px; } .inventory_quest_scroll_owl { background-image: url(spritesmith-main-6.png); - background-position: -1192px -1504px; + background-position: -1421px -1544px; width: 48px; height: 51px; } .inventory_quest_scroll_penguin { background-image: url(spritesmith-main-6.png); - background-position: -1241px -1504px; + background-position: -1470px -1544px; width: 48px; height: 51px; } .inventory_quest_scroll_rat { background-image: url(spritesmith-main-6.png); - background-position: -1290px -1504px; + background-position: -1519px -1544px; width: 48px; height: 51px; } .inventory_quest_scroll_rock { background-image: url(spritesmith-main-6.png); - background-position: -1339px -1504px; + background-position: -1568px -1544px; width: 48px; height: 51px; } .inventory_quest_scroll_rooster { background-image: url(spritesmith-main-6.png); - background-position: -1388px -1504px; + background-position: -1617px -1544px; width: 48px; height: 51px; } .inventory_quest_scroll_sabretooth { background-image: url(spritesmith-main-6.png); - background-position: -1437px -1504px; + background-position: -1666px -1544px; width: 48px; height: 51px; } .inventory_quest_scroll_sheep { background-image: url(spritesmith-main-6.png); - background-position: -1486px -1504px; + background-position: 0px -1596px; width: 48px; height: 51px; } .inventory_quest_scroll_slime { background-image: url(spritesmith-main-6.png); - background-position: -1535px -1504px; + background-position: -49px -1596px; width: 48px; height: 51px; } .inventory_quest_scroll_snail { background-image: url(spritesmith-main-6.png); - background-position: -1584px -1504px; + background-position: -98px -1596px; width: 48px; height: 51px; } .inventory_quest_scroll_snake { background-image: url(spritesmith-main-6.png); - background-position: -1633px -1504px; + background-position: -147px -1596px; width: 48px; height: 51px; } .inventory_quest_scroll_spider { background-image: url(spritesmith-main-6.png); - background-position: -1682px -1504px; + background-position: -196px -1596px; width: 48px; height: 51px; } .inventory_quest_scroll_treeling { background-image: url(spritesmith-main-6.png); - background-position: -212px -1556px; + background-position: -245px -1596px; width: 48px; height: 51px; } .inventory_quest_scroll_trex { background-image: url(spritesmith-main-6.png); - background-position: -310px -1556px; + background-position: -343px -1596px; width: 48px; height: 51px; } .inventory_quest_scroll_trex_undead { background-image: url(spritesmith-main-6.png); - background-position: -261px -1556px; + background-position: -1700px -1108px; width: 48px; height: 51px; } .inventory_quest_scroll_turtle { background-image: url(spritesmith-main-6.png); - background-position: -359px -1556px; + background-position: -392px -1596px; width: 48px; height: 51px; } .inventory_quest_scroll_unicorn { background-image: url(spritesmith-main-6.png); - background-position: -408px -1556px; + background-position: -441px -1596px; width: 48px; height: 51px; } .inventory_quest_scroll_vice1 { background-image: url(spritesmith-main-6.png); - background-position: -506px -1556px; + background-position: -539px -1596px; width: 48px; height: 51px; } .inventory_quest_scroll_vice1_locked { background-image: url(spritesmith-main-6.png); - background-position: -457px -1556px; + background-position: -490px -1596px; width: 48px; height: 51px; } .inventory_quest_scroll_vice2 { background-image: url(spritesmith-main-6.png); - background-position: -604px -1556px; + background-position: -637px -1596px; width: 48px; height: 51px; } .inventory_quest_scroll_vice2_locked { background-image: url(spritesmith-main-6.png); - background-position: -1751px -104px; + background-position: -588px -1596px; width: 48px; height: 51px; } .inventory_quest_scroll_vice3 { background-image: url(spritesmith-main-6.png); - background-position: -702px -1556px; + background-position: -735px -1596px; width: 48px; height: 51px; } .inventory_quest_scroll_vice3_locked { background-image: url(spritesmith-main-6.png); - background-position: -653px -1556px; + background-position: -686px -1596px; width: 48px; height: 51px; } .inventory_quest_scroll_whale { background-image: url(spritesmith-main-6.png); - background-position: -751px -1556px; + background-position: -784px -1596px; width: 48px; height: 51px; } .shop_copper { background-image: url(spritesmith-main-6.png); - background-position: -1751px -1677px; + background-position: -1417px -1080px; width: 32px; height: 22px; } .shop_eyes { background-image: url(spritesmith-main-6.png); - background-position: -1751px -1222px; + background-position: -1682px -1596px; width: 40px; height: 40px; } .shop_gold { background-image: url(spritesmith-main-6.png); - background-position: -1751px -1654px; + background-position: -1384px -1080px; width: 32px; height: 22px; } .shop_opaquePotion { background-image: url(spritesmith-main-6.png); - background-position: -1751px -1263px; + background-position: -43px -1700px; width: 40px; height: 40px; } .shop_potion { background-image: url(spritesmith-main-6.png); - background-position: -1751px -1304px; + background-position: -125px -1700px; width: 40px; height: 40px; } .shop_reroll { background-image: url(spritesmith-main-6.png); - background-position: -1751px -1345px; + background-position: -166px -1700px; width: 40px; height: 40px; } .shop_seafoam { background-image: url(spritesmith-main-6.png); - background-position: -1751px -1468px; + background-position: -1751px -1664px; width: 32px; height: 32px; } .shop_shinySeed { background-image: url(spritesmith-main-6.png); - background-position: -1751px -1501px; + background-position: -1700px -1073px; width: 32px; height: 32px; } .shop_silver { background-image: url(spritesmith-main-6.png); - background-position: -1751px -1631px; + background-position: -1351px -1080px; width: 32px; height: 22px; } .shop_snowball { background-image: url(spritesmith-main-6.png); - background-position: -1751px -1534px; + background-position: -1700px -1212px; width: 32px; height: 32px; } .shop_spookySparkles { background-image: url(spritesmith-main-6.png); - background-position: -1751px -1567px; + background-position: -1102px -1070px; width: 32px; height: 32px; } .shop_backStab { background-image: url(spritesmith-main-6.png); - background-position: -1751px -1181px; + background-position: -1641px -1596px; width: 40px; height: 40px; } .shop_brightness { background-image: url(spritesmith-main-6.png); - background-position: -1751px -1140px; + background-position: -1600px -1596px; width: 40px; height: 40px; } .shop_defensiveStance { background-image: url(spritesmith-main-6.png); - background-position: -1751px -1099px; + background-position: -1559px -1596px; width: 40px; height: 40px; } .shop_earth { background-image: url(spritesmith-main-6.png); - background-position: -1751px -1427px; + background-position: -1518px -1596px; width: 40px; height: 40px; } .shop_fireball { background-image: url(spritesmith-main-6.png); - background-position: -1751px -1017px; + background-position: -1477px -1596px; width: 40px; height: 40px; } .shop_frost { background-image: url(spritesmith-main-6.png); - background-position: -1751px -976px; + background-position: -207px -1700px; width: 40px; height: 40px; } .shop_heal { background-image: url(spritesmith-main-6.png); - background-position: -1751px -935px; + background-position: -1395px -1596px; width: 40px; height: 40px; } .shop_healAll { background-image: url(spritesmith-main-6.png); - background-position: -1751px -894px; + background-position: -1354px -1596px; width: 40px; height: 40px; } .shop_intimidate { background-image: url(spritesmith-main-6.png); - background-position: -1751px -853px; + background-position: -1313px -1596px; width: 40px; height: 40px; } .shop_mpheal { background-image: url(spritesmith-main-6.png); - background-position: -1751px -812px; + background-position: -1272px -1596px; width: 40px; height: 40px; } .shop_pickPocket { background-image: url(spritesmith-main-6.png); - background-position: -1751px -771px; + background-position: -1231px -1596px; width: 40px; height: 40px; } .shop_protectAura { background-image: url(spritesmith-main-6.png); - background-position: -1751px -730px; + background-position: -1436px -1596px; width: 40px; height: 40px; } .shop_smash { background-image: url(spritesmith-main-6.png); - background-position: -1751px -689px; + background-position: -1190px -1596px; width: 40px; height: 40px; } .shop_stealth { background-image: url(spritesmith-main-6.png); - background-position: -1751px -648px; + background-position: -1149px -1596px; width: 40px; height: 40px; } .shop_toolsOfTrade { background-image: url(spritesmith-main-6.png); - background-position: -1751px -607px; + background-position: -1697px -1338px; width: 40px; height: 40px; } .shop_valorousPresence { background-image: url(spritesmith-main-6.png); - background-position: -1751px -1058px; + background-position: -1656px -1338px; width: 40px; height: 40px; } .Pet_Egg_Axolotl { background-image: url(spritesmith-main-6.png); - background-position: -1127px -1610px; + background-position: -1274px -1648px; width: 48px; height: 51px; } .Pet_Egg_BearCub { background-image: url(spritesmith-main-6.png); - background-position: -1176px -1610px; + background-position: -1323px -1648px; width: 48px; height: 51px; } .Pet_Egg_Bunny { background-image: url(spritesmith-main-6.png); - background-position: -1225px -1610px; + background-position: -1372px -1648px; width: 48px; height: 51px; } .Pet_Egg_Cactus { background-image: url(spritesmith-main-6.png); - background-position: -1688px -871px; + background-position: -1421px -1648px; width: 48px; height: 51px; } .Pet_Egg_Cheetah { background-image: url(spritesmith-main-6.png); - background-position: -1323px -1610px; + background-position: -1470px -1648px; width: 48px; height: 51px; } .Pet_Egg_Cuttlefish { background-image: url(spritesmith-main-6.png); - background-position: -1372px -1610px; + background-position: -1519px -1648px; width: 48px; height: 51px; } .Pet_Egg_Deer { background-image: url(spritesmith-main-6.png); - background-position: -1421px -1610px; + background-position: -1568px -1648px; width: 48px; height: 51px; } .Pet_Egg_Dragon { background-image: url(spritesmith-main-6.png); - background-position: -1470px -1610px; + background-position: -1617px -1648px; width: 48px; height: 51px; } .Pet_Egg_Egg { background-image: url(spritesmith-main-6.png); - background-position: -1519px -1610px; + background-position: -1666px -1648px; width: 48px; height: 51px; } .Pet_Egg_Falcon { background-image: url(spritesmith-main-6.png); - background-position: -1568px -1610px; + background-position: -1751px 0px; width: 48px; height: 51px; } .Pet_Egg_FlyingPig { background-image: url(spritesmith-main-6.png); - background-position: -1617px -1610px; + background-position: -1751px -52px; width: 48px; height: 51px; } .Pet_Egg_Fox { background-image: url(spritesmith-main-6.png); - background-position: -1666px -1610px; + background-position: -1751px -104px; width: 48px; height: 51px; } .Pet_Egg_Frog { background-image: url(spritesmith-main-6.png); - background-position: 0px -1662px; + background-position: -1751px -156px; width: 48px; height: 51px; } .Pet_Egg_Gryphon { background-image: url(spritesmith-main-6.png); - background-position: -49px -1662px; + background-position: -1751px -208px; width: 48px; height: 51px; } .Pet_Egg_Hedgehog { background-image: url(spritesmith-main-6.png); - background-position: -98px -1662px; + background-position: -1751px -260px; width: 48px; height: 51px; } .Pet_Egg_Horse { background-image: url(spritesmith-main-6.png); - background-position: -147px -1662px; + background-position: -1751px -312px; width: 48px; height: 51px; } .Pet_Egg_LionCub { background-image: url(spritesmith-main-6.png); - background-position: -196px -1662px; + background-position: -1751px -364px; width: 48px; height: 51px; } .Pet_Egg_Monkey { background-image: url(spritesmith-main-6.png); - background-position: -245px -1662px; + background-position: -1751px -416px; width: 48px; height: 51px; } .Pet_Egg_Octopus { background-image: url(spritesmith-main-6.png); - background-position: -294px -1662px; + background-position: -1751px -468px; width: 48px; height: 51px; } .Pet_Egg_Owl { background-image: url(spritesmith-main-6.png); - background-position: -343px -1662px; + background-position: -1751px -520px; width: 48px; height: 51px; } .Pet_Egg_PandaCub { background-image: url(spritesmith-main-6.png); - background-position: -392px -1662px; + background-position: -1751px -572px; width: 48px; height: 51px; } .Pet_Egg_Parrot { background-image: url(spritesmith-main-6.png); - background-position: -441px -1662px; + background-position: -1751px -624px; width: 48px; height: 51px; } .Pet_Egg_Penguin { background-image: url(spritesmith-main-6.png); - background-position: -490px -1662px; + background-position: -1751px -676px; width: 48px; height: 51px; } .Pet_Egg_PolarBear { background-image: url(spritesmith-main-6.png); - background-position: -539px -1662px; + background-position: -1751px -728px; width: 48px; height: 51px; } .Pet_Egg_Rat { background-image: url(spritesmith-main-6.png); - background-position: -588px -1662px; + background-position: -1751px -780px; width: 48px; height: 51px; } .Pet_Egg_Rock { background-image: url(spritesmith-main-6.png); - background-position: -637px -1662px; + background-position: -1751px -832px; width: 48px; height: 51px; } .Pet_Egg_Rooster { background-image: url(spritesmith-main-6.png); - background-position: -686px -1662px; + background-position: -1751px -884px; width: 48px; height: 51px; } .Pet_Egg_Sabretooth { background-image: url(spritesmith-main-6.png); - background-position: -735px -1662px; + background-position: -1751px -936px; width: 48px; height: 51px; } .Pet_Egg_Seahorse { background-image: url(spritesmith-main-6.png); - background-position: -784px -1662px; + background-position: -1751px -988px; width: 48px; height: 51px; } .Pet_Egg_Sheep { background-image: url(spritesmith-main-6.png); - background-position: -833px -1662px; + background-position: -1751px -1040px; width: 48px; height: 51px; } .Pet_Egg_Slime { background-image: url(spritesmith-main-6.png); - background-position: -882px -1662px; + background-position: -1751px -1092px; width: 48px; height: 51px; } .Pet_Egg_Snail { background-image: url(spritesmith-main-6.png); - background-position: -931px -1662px; + background-position: -1751px -1144px; width: 48px; height: 51px; } .Pet_Egg_Snake { background-image: url(spritesmith-main-6.png); - background-position: -980px -1662px; + background-position: -1751px -1196px; width: 48px; height: 51px; } .Pet_Egg_Spider { background-image: url(spritesmith-main-6.png); - background-position: -1029px -1662px; + background-position: -1751px -1248px; width: 48px; height: 51px; } .Pet_Egg_TRex { background-image: url(spritesmith-main-6.png); - background-position: -1176px -1662px; + background-position: -1751px -1404px; width: 48px; height: 51px; } .Pet_Egg_TigerCub { background-image: url(spritesmith-main-6.png); - background-position: -1078px -1662px; + background-position: -1751px -1300px; width: 48px; height: 51px; } .Pet_Egg_Treeling { background-image: url(spritesmith-main-6.png); - background-position: -1127px -1662px; + background-position: -1751px -1352px; width: 48px; height: 51px; } .Pet_Egg_Turtle { background-image: url(spritesmith-main-6.png); - background-position: -1225px -1662px; + background-position: -1751px -1456px; width: 48px; height: 51px; } .Pet_Egg_Unicorn { background-image: url(spritesmith-main-6.png); - background-position: -1274px -1662px; + background-position: -1751px -1508px; width: 48px; height: 51px; } .Pet_Egg_Whale { background-image: url(spritesmith-main-6.png); - background-position: -1323px -1662px; + background-position: -1751px -1560px; width: 48px; height: 51px; } .Pet_Egg_Wolf { background-image: url(spritesmith-main-6.png); - background-position: -1372px -1662px; + background-position: -1751px -1612px; width: 48px; height: 51px; } .Pet_Food_Cake_Base { background-image: url(spritesmith-main-6.png); - background-position: -1751px -475px; + background-position: -1061px -1596px; width: 43px; height: 43px; } .Pet_Food_Cake_CottonCandyBlue { background-image: url(spritesmith-main-6.png); - background-position: -1751px -519px; + background-position: 0px -1700px; width: 42px; height: 44px; } .Pet_Food_Cake_CottonCandyPink { background-image: url(spritesmith-main-6.png); - background-position: -1751px -294px; + background-position: -885px -1596px; width: 43px; height: 45px; } .Pet_Food_Cake_Desert { background-image: url(spritesmith-main-6.png); - background-position: -1751px -385px; + background-position: -929px -1596px; width: 43px; height: 44px; } .Pet_Food_Cake_Golden { background-image: url(spritesmith-main-6.png); - background-position: -1751px -564px; + background-position: -1105px -1596px; width: 43px; height: 42px; } .Pet_Food_Cake_Red { background-image: url(spritesmith-main-6.png); - background-position: -1751px -340px; + background-position: -973px -1596px; width: 43px; height: 44px; } .Pet_Food_Cake_Shade { background-image: url(spritesmith-main-6.png); - background-position: -1751px -430px; + background-position: -1017px -1596px; width: 43px; height: 44px; } .Pet_Food_Cake_Skeleton { background-image: url(spritesmith-main-6.png); - background-position: -1751px -201px; + background-position: -1492px -1326px; width: 42px; height: 47px; } .Pet_Food_Cake_White { background-image: url(spritesmith-main-6.png); - background-position: -1751px -249px; + background-position: -1492px -1378px; width: 44px; height: 44px; } .Pet_Food_Cake_Zombie { background-image: url(spritesmith-main-6.png); - background-position: -1751px -156px; + background-position: -1688px -923px; width: 45px; height: 44px; } .Pet_Food_Candy_Base { background-image: url(spritesmith-main-6.png); - background-position: -1751px -52px; + background-position: -1225px -1648px; width: 48px; height: 51px; } .Pet_Food_Candy_CottonCandyBlue { background-image: url(spritesmith-main-6.png); - background-position: -1751px 0px; + background-position: -1176px -1648px; width: 48px; height: 51px; } .Pet_Food_Candy_CottonCandyPink { background-image: url(spritesmith-main-6.png); - background-position: -1666px -1662px; + background-position: -1127px -1648px; width: 48px; height: 51px; } .Pet_Food_Candy_Desert { background-image: url(spritesmith-main-6.png); - background-position: -1617px -1662px; + background-position: -1078px -1648px; width: 48px; height: 51px; } .Pet_Food_Candy_Golden { background-image: url(spritesmith-main-6.png); - background-position: -1568px -1662px; + background-position: -980px -1648px; width: 48px; height: 51px; } .Pet_Food_Candy_Red { background-image: url(spritesmith-main-6.png); - background-position: -1519px -1662px; + background-position: -931px -1648px; width: 48px; height: 51px; } .Pet_Food_Candy_Shade { background-image: url(spritesmith-main-6.png); - background-position: -1470px -1662px; + background-position: -882px -1648px; width: 48px; height: 51px; } .Pet_Food_Candy_Skeleton { background-image: url(spritesmith-main-6.png); - background-position: -1421px -1662px; + background-position: -833px -1648px; width: 48px; height: 51px; } .Pet_Food_Candy_White { background-image: url(spritesmith-main-6.png); - background-position: -1078px -1610px; + background-position: -784px -1648px; width: 48px; height: 51px; } .Pet_Food_Candy_Zombie { background-image: url(spritesmith-main-6.png); - background-position: -1029px -1610px; + background-position: -735px -1648px; width: 48px; height: 51px; } .Pet_Food_Chocolate { background-image: url(spritesmith-main-6.png); - background-position: -980px -1610px; + background-position: -686px -1648px; width: 48px; height: 51px; } .Pet_Food_CottonCandyBlue { background-image: url(spritesmith-main-6.png); - background-position: -931px -1610px; + background-position: -637px -1648px; width: 48px; height: 51px; } .Pet_Food_CottonCandyPink { background-image: url(spritesmith-main-6.png); - background-position: -882px -1610px; + background-position: -588px -1648px; width: 48px; height: 51px; } .Pet_Food_Fish { background-image: url(spritesmith-main-6.png); - background-position: -833px -1610px; + background-position: -539px -1648px; width: 48px; height: 51px; } .Pet_Food_Honey { background-image: url(spritesmith-main-6.png); - background-position: -784px -1610px; + background-position: -490px -1648px; width: 48px; height: 51px; } .Pet_Food_Meat { background-image: url(spritesmith-main-6.png); - background-position: -735px -1610px; + background-position: -441px -1648px; width: 48px; height: 51px; } .Pet_Food_Milk { background-image: url(spritesmith-main-6.png); - background-position: -686px -1610px; + background-position: -392px -1648px; width: 48px; height: 51px; } .Pet_Food_Potatoe { background-image: url(spritesmith-main-6.png); - background-position: -637px -1610px; + background-position: -343px -1648px; width: 48px; height: 51px; } .Pet_Food_RottenMeat { background-image: url(spritesmith-main-6.png); - background-position: -588px -1610px; + background-position: -294px -1648px; width: 48px; height: 51px; } .Pet_Food_Saddle { background-image: url(spritesmith-main-6.png); - background-position: -539px -1610px; + background-position: -245px -1648px; width: 48px; height: 51px; } .Pet_Food_Strawberry { background-image: url(spritesmith-main-6.png); - background-position: -490px -1610px; + background-position: -196px -1648px; width: 48px; height: 51px; } .Mount_Body_Axolotl-Base { background-image: url(spritesmith-main-6.png); - background-position: 0px -1504px; + background-position: -1320px -974px; width: 105px; height: 105px; } .Mount_Body_Axolotl-CottonCandyBlue { background-image: url(spritesmith-main-6.png); - background-position: -1355px -1326px; + background-position: -1076px -1326px; width: 105px; height: 105px; } .Mount_Body_Axolotl-CottonCandyPink { background-image: url(spritesmith-main-6.png); - background-position: -1249px -1326px; + background-position: -1288px -1326px; width: 105px; height: 105px; } .Mount_Body_Axolotl-Desert { background-image: url(spritesmith-main-6.png); - background-position: -1143px -1326px; + background-position: -1182px -1326px; width: 105px; height: 105px; } .Mount_Body_Axolotl-Golden { background-image: url(spritesmith-main-6.png); - background-position: -1037px -1326px; + background-position: -1537px -1379px; width: 105px; height: 105px; } .Mount_Body_Axolotl-Red { background-image: url(spritesmith-main-6.png); - background-position: -931px -1326px; + background-position: -970px -1326px; width: 105px; height: 105px; } .Mount_Body_Axolotl-Shade { background-image: url(spritesmith-main-6.png); - background-position: -825px -1326px; + background-position: -1426px -974px; width: 105px; height: 105px; } .Mount_Body_Axolotl-Skeleton { background-image: url(spritesmith-main-6.png); - background-position: -719px -1326px; - width: 105px; - height: 105px; -} -.Mount_Body_Axolotl-White { - background-image: url(spritesmith-main-6.png); - background-position: -1426px -974px; - width: 105px; - height: 105px; -} -.Mount_Body_Axolotl-Zombie { - background-image: url(spritesmith-main-6.png); - background-position: -1320px -974px; - width: 105px; - height: 105px; -} -.Mount_Body_BearCub-Base { - background-image: url(spritesmith-main-6.png); - background-position: -1643px -1313px; - width: 105px; - height: 105px; -} -.Mount_Body_BearCub-CottonCandyBlue { - background-image: url(spritesmith-main-6.png); - background-position: -1537px -1313px; - width: 105px; - height: 105px; -} -.Mount_Body_BearCub-CottonCandyPink { - background-image: url(spritesmith-main-6.png); - background-position: -1643px -1207px; - width: 105px; - height: 105px; -} -.Mount_Body_BearCub-Desert { - background-image: url(spritesmith-main-6.png); - background-position: -1643px -1101px; - width: 105px; - height: 105px; -} -.Mount_Body_BearCub-Floral { - background-image: url(spritesmith-main-6.png); - background-position: -1537px -1101px; - width: 105px; - height: 105px; -} -.Mount_Body_BearCub-Golden { - background-image: url(spritesmith-main-6.png); - background-position: -1537px -1207px; - width: 105px; - height: 105px; -} -.Mount_Body_BearCub-Peppermint { - background-image: url(spritesmith-main-6.png); - background-position: -106px -1504px; + background-position: -1643px -1379px; width: 105px; height: 105px; } diff --git a/common/dist/sprites/spritesmith-main-6.png b/common/dist/sprites/spritesmith-main-6.png index 871ed442c8..667d4d8979 100644 Binary files a/common/dist/sprites/spritesmith-main-6.png and b/common/dist/sprites/spritesmith-main-6.png differ diff --git a/common/dist/sprites/spritesmith-main-7.css b/common/dist/sprites/spritesmith-main-7.css index 3d209c8a11..9c22416f65 100644 --- a/common/dist/sprites/spritesmith-main-7.css +++ b/common/dist/sprites/spritesmith-main-7.css @@ -1,720 +1,774 @@ -.Mount_Body_BearCub-Polar { - background-image: url(spritesmith-main-7.png); - background-position: -636px -575px; - width: 105px; - height: 105px; -} -.Mount_Body_BearCub-Red { - background-image: url(spritesmith-main-7.png); - background-position: -318px -1105px; - width: 105px; - height: 105px; -} -.Mount_Body_BearCub-Shade { - background-image: url(spritesmith-main-7.png); - background-position: -742px 0px; - width: 105px; - height: 105px; -} -.Mount_Body_BearCub-Skeleton { - background-image: url(spritesmith-main-7.png); - background-position: -742px -106px; - width: 105px; - height: 105px; -} -.Mount_Body_BearCub-Spooky { - background-image: url(spritesmith-main-7.png); - background-position: -742px -212px; - width: 105px; - height: 105px; -} -.Mount_Body_BearCub-White { - background-image: url(spritesmith-main-7.png); - background-position: -742px -318px; - width: 105px; - height: 105px; -} -.Mount_Body_BearCub-Zombie { - background-image: url(spritesmith-main-7.png); - background-position: -742px -424px; - width: 105px; - height: 105px; -} -.Mount_Body_Bunny-Base { - background-image: url(spritesmith-main-7.png); - background-position: -742px -530px; - width: 105px; - height: 105px; -} -.Mount_Body_Bunny-CottonCandyBlue { - background-image: url(spritesmith-main-7.png); - background-position: 0px -681px; - width: 105px; - height: 105px; -} -.Mount_Body_Bunny-CottonCandyPink { - background-image: url(spritesmith-main-7.png); - background-position: -106px -681px; - width: 105px; - height: 105px; -} -.Mount_Body_Bunny-Desert { +.Mount_Body_Axolotl-White { background-image: url(spritesmith-main-7.png); background-position: -212px -681px; width: 105px; height: 105px; } -.Mount_Body_Bunny-Golden { +.Mount_Body_Axolotl-Zombie { background-image: url(spritesmith-main-7.png); - background-position: 0px -1105px; + background-position: -318px -1105px; width: 105px; height: 105px; } -.Mount_Body_Bunny-Red { - background-image: url(spritesmith-main-7.png); - background-position: -106px -1105px; - width: 105px; - height: 105px; -} -.Mount_Body_Bunny-Shade { - background-image: url(spritesmith-main-7.png); - background-position: -212px -1105px; - width: 105px; - height: 105px; -} -.Mount_Body_Bunny-Skeleton { - background-image: url(spritesmith-main-7.png); - background-position: -424px -1105px; - width: 105px; - height: 105px; -} -.Mount_Body_Bunny-White { - background-image: url(spritesmith-main-7.png); - background-position: -530px -1105px; - width: 105px; - height: 105px; -} -.Mount_Body_Bunny-Zombie { - background-image: url(spritesmith-main-7.png); - background-position: -636px -1105px; - width: 105px; - height: 105px; -} -.Mount_Body_Cactus-Base { - background-image: url(spritesmith-main-7.png); - background-position: -742px -1105px; - width: 105px; - height: 105px; -} -.Mount_Body_Cactus-CottonCandyBlue { - background-image: url(spritesmith-main-7.png); - background-position: -848px -1105px; - width: 105px; - height: 105px; -} -.Mount_Body_Cactus-CottonCandyPink { - background-image: url(spritesmith-main-7.png); - background-position: -954px -1105px; - width: 105px; - height: 105px; -} -.Mount_Body_Cactus-Desert { - background-image: url(spritesmith-main-7.png); - background-position: -424px -1317px; - width: 105px; - height: 105px; -} -.Mount_Body_Cactus-Floral { - background-image: url(spritesmith-main-7.png); - background-position: -848px -1317px; - width: 105px; - height: 105px; -} -.Mount_Body_Cactus-Golden { - background-image: url(spritesmith-main-7.png); - background-position: -954px -1317px; - width: 105px; - height: 105px; -} -.Mount_Body_Cactus-Peppermint { - background-image: url(spritesmith-main-7.png); - background-position: -1060px -1317px; - width: 105px; - height: 105px; -} -.Mount_Body_Cactus-Red { - background-image: url(spritesmith-main-7.png); - background-position: -530px -230px; - width: 105px; - height: 105px; -} -.Mount_Body_Cactus-Shade { - background-image: url(spritesmith-main-7.png); - background-position: -530px -336px; - width: 105px; - height: 105px; -} -.Mount_Body_Cactus-Skeleton { - background-image: url(spritesmith-main-7.png); - background-position: -221px -469px; - width: 105px; - height: 105px; -} -.Mount_Body_Cactus-Spooky { - background-image: url(spritesmith-main-7.png); - background-position: -327px -469px; - width: 105px; - height: 105px; -} -.Mount_Body_Cactus-White { - background-image: url(spritesmith-main-7.png); - background-position: -433px -469px; - width: 105px; - height: 105px; -} -.Mount_Body_Cactus-Zombie { - background-image: url(spritesmith-main-7.png); - background-position: -636px 0px; - width: 105px; - height: 105px; -} -.Mount_Body_Cheetah-Base { - background-image: url(spritesmith-main-7.png); - background-position: -636px -106px; - width: 105px; - height: 105px; -} -.Mount_Body_Cheetah-CottonCandyBlue { - background-image: url(spritesmith-main-7.png); - background-position: -636px -212px; - width: 105px; - height: 105px; -} -.Mount_Body_Cheetah-CottonCandyPink { - background-image: url(spritesmith-main-7.png); - background-position: -636px -318px; - width: 105px; - height: 105px; -} -.Mount_Body_Cheetah-Desert { - background-image: url(spritesmith-main-7.png); - background-position: -636px -424px; - width: 105px; - height: 105px; -} -.Mount_Body_Cheetah-Golden { - background-image: url(spritesmith-main-7.png); - background-position: 0px -575px; - width: 105px; - height: 105px; -} -.Mount_Body_Cheetah-Red { - background-image: url(spritesmith-main-7.png); - background-position: -106px -575px; - width: 105px; - height: 105px; -} -.Mount_Body_Cheetah-Shade { - background-image: url(spritesmith-main-7.png); - background-position: -212px -575px; - width: 105px; - height: 105px; -} -.Mount_Body_Cheetah-Skeleton { - background-image: url(spritesmith-main-7.png); - background-position: -318px -575px; - width: 105px; - height: 105px; -} -.Mount_Body_Cheetah-White { - background-image: url(spritesmith-main-7.png); - background-position: -424px -575px; - width: 105px; - height: 105px; -} -.Mount_Body_Cheetah-Zombie { - background-image: url(spritesmith-main-7.png); - background-position: -530px -575px; - width: 105px; - height: 105px; -} -.Mount_Body_Cuttlefish-Base { - background-image: url(spritesmith-main-7.png); - background-position: -424px 0px; - width: 105px; - height: 114px; -} -.Mount_Body_Cuttlefish-CottonCandyBlue { - background-image: url(spritesmith-main-7.png); - background-position: -212px 0px; - width: 105px; - height: 114px; -} -.Mount_Body_Cuttlefish-CottonCandyPink { - background-image: url(spritesmith-main-7.png); - background-position: 0px -124px; - width: 105px; - height: 114px; -} -.Mount_Body_Cuttlefish-Desert { - background-image: url(spritesmith-main-7.png); - background-position: -106px -124px; - width: 105px; - height: 114px; -} -.Mount_Body_Cuttlefish-Golden { - background-image: url(spritesmith-main-7.png); - background-position: -212px -124px; - width: 105px; - height: 114px; -} -.Mount_Body_Cuttlefish-Red { - background-image: url(spritesmith-main-7.png); - background-position: -318px 0px; - width: 105px; - height: 114px; -} -.Mount_Body_Cuttlefish-Shade { - background-image: url(spritesmith-main-7.png); - background-position: -318px -115px; - width: 105px; - height: 114px; -} -.Mount_Body_Cuttlefish-Skeleton { - background-image: url(spritesmith-main-7.png); - background-position: 0px -239px; - width: 105px; - height: 114px; -} -.Mount_Body_Cuttlefish-White { - background-image: url(spritesmith-main-7.png); - background-position: -106px -239px; - width: 105px; - height: 114px; -} -.Mount_Body_Cuttlefish-Zombie { - background-image: url(spritesmith-main-7.png); - background-position: -212px -239px; - width: 105px; - height: 114px; -} -.Mount_Body_Deer-Base { +.Mount_Body_BearCub-Base { background-image: url(spritesmith-main-7.png); background-position: -318px -681px; width: 105px; height: 105px; } -.Mount_Body_Deer-CottonCandyBlue { +.Mount_Body_BearCub-CottonCandyBlue { background-image: url(spritesmith-main-7.png); background-position: -424px -681px; width: 105px; height: 105px; } -.Mount_Body_Deer-CottonCandyPink { +.Mount_Body_BearCub-CottonCandyPink { background-image: url(spritesmith-main-7.png); background-position: -530px -681px; width: 105px; height: 105px; } -.Mount_Body_Deer-Desert { +.Mount_Body_BearCub-Desert { background-image: url(spritesmith-main-7.png); background-position: -636px -681px; width: 105px; height: 105px; } -.Mount_Body_Deer-Golden { +.Mount_Body_BearCub-Floral { background-image: url(spritesmith-main-7.png); background-position: -742px -681px; width: 105px; height: 105px; } -.Mount_Body_Deer-Red { +.Mount_Body_BearCub-Golden { background-image: url(spritesmith-main-7.png); background-position: -848px 0px; width: 105px; height: 105px; } -.Mount_Body_Deer-Shade { +.Mount_Body_BearCub-Peppermint { background-image: url(spritesmith-main-7.png); background-position: -848px -106px; width: 105px; height: 105px; } -.Mount_Body_Deer-Skeleton { +.Mount_Body_BearCub-Polar { background-image: url(spritesmith-main-7.png); background-position: -848px -212px; width: 105px; height: 105px; } -.Mount_Body_Deer-White { +.Mount_Body_BearCub-Red { background-image: url(spritesmith-main-7.png); background-position: -848px -318px; width: 105px; height: 105px; } -.Mount_Body_Deer-Zombie { +.Mount_Body_BearCub-Shade { + background-image: url(spritesmith-main-7.png); + background-position: -954px -1105px; + width: 105px; + height: 105px; +} +.Mount_Body_BearCub-Skeleton { + background-image: url(spritesmith-main-7.png); + background-position: -1060px -1105px; + width: 105px; + height: 105px; +} +.Mount_Body_BearCub-Spooky { + background-image: url(spritesmith-main-7.png); + background-position: -1166px -1105px; + width: 105px; + height: 105px; +} +.Mount_Body_BearCub-White { + background-image: url(spritesmith-main-7.png); + background-position: -1272px 0px; + width: 105px; + height: 105px; +} +.Mount_Body_BearCub-Zombie { + background-image: url(spritesmith-main-7.png); + background-position: -1272px -106px; + width: 105px; + height: 105px; +} +.Mount_Body_Bunny-Base { + background-image: url(spritesmith-main-7.png); + background-position: -1272px -212px; + width: 105px; + height: 105px; +} +.Mount_Body_Bunny-CottonCandyBlue { + background-image: url(spritesmith-main-7.png); + background-position: -1272px -318px; + width: 105px; + height: 105px; +} +.Mount_Body_Bunny-CottonCandyPink { + background-image: url(spritesmith-main-7.png); + background-position: -1272px -424px; + width: 105px; + height: 105px; +} +.Mount_Body_Bunny-Desert { + background-image: url(spritesmith-main-7.png); + background-position: -1272px -530px; + width: 105px; + height: 105px; +} +.Mount_Body_Bunny-Golden { + background-image: url(spritesmith-main-7.png); + background-position: -1272px -636px; + width: 105px; + height: 105px; +} +.Mount_Body_Bunny-Red { + background-image: url(spritesmith-main-7.png); + background-position: -1378px -1317px; + width: 105px; + height: 105px; +} +.Mount_Body_Bunny-Shade { + background-image: url(spritesmith-main-7.png); + background-position: -1484px -318px; + width: 105px; + height: 105px; +} +.Mount_Body_Bunny-Skeleton { + background-image: url(spritesmith-main-7.png); + background-position: -1484px -424px; + width: 105px; + height: 105px; +} +.Mount_Body_Bunny-White { + background-image: url(spritesmith-main-7.png); + background-position: -1484px -530px; + width: 105px; + height: 105px; +} +.Mount_Body_Bunny-Zombie { + background-image: url(spritesmith-main-7.png); + background-position: -530px -336px; + width: 105px; + height: 105px; +} +.Mount_Body_Cactus-Base { + background-image: url(spritesmith-main-7.png); + background-position: -221px -469px; + width: 105px; + height: 105px; +} +.Mount_Body_Cactus-CottonCandyBlue { + background-image: url(spritesmith-main-7.png); + background-position: -327px -469px; + width: 105px; + height: 105px; +} +.Mount_Body_Cactus-CottonCandyPink { + background-image: url(spritesmith-main-7.png); + background-position: -433px -469px; + width: 105px; + height: 105px; +} +.Mount_Body_Cactus-Desert { + background-image: url(spritesmith-main-7.png); + background-position: -636px 0px; + width: 105px; + height: 105px; +} +.Mount_Body_Cactus-Floral { + background-image: url(spritesmith-main-7.png); + background-position: -636px -106px; + width: 105px; + height: 105px; +} +.Mount_Body_Cactus-Golden { + background-image: url(spritesmith-main-7.png); + background-position: -636px -212px; + width: 105px; + height: 105px; +} +.Mount_Body_Cactus-Peppermint { + background-image: url(spritesmith-main-7.png); + background-position: -636px -318px; + width: 105px; + height: 105px; +} +.Mount_Body_Cactus-Red { + background-image: url(spritesmith-main-7.png); + background-position: -636px -424px; + width: 105px; + height: 105px; +} +.Mount_Body_Cactus-Shade { + background-image: url(spritesmith-main-7.png); + background-position: 0px -575px; + width: 105px; + height: 105px; +} +.Mount_Body_Cactus-Skeleton { + background-image: url(spritesmith-main-7.png); + background-position: -106px -575px; + width: 105px; + height: 105px; +} +.Mount_Body_Cactus-Spooky { + background-image: url(spritesmith-main-7.png); + background-position: -212px -575px; + width: 105px; + height: 105px; +} +.Mount_Body_Cactus-White { + background-image: url(spritesmith-main-7.png); + background-position: -318px -575px; + width: 105px; + height: 105px; +} +.Mount_Body_Cactus-Zombie { + background-image: url(spritesmith-main-7.png); + background-position: -424px -575px; + width: 105px; + height: 105px; +} +.Mount_Body_Cheetah-Base { + background-image: url(spritesmith-main-7.png); + background-position: -530px -575px; + width: 105px; + height: 105px; +} +.Mount_Body_Cheetah-CottonCandyBlue { + background-image: url(spritesmith-main-7.png); + background-position: -636px -575px; + width: 105px; + height: 105px; +} +.Mount_Body_Cheetah-CottonCandyPink { + background-image: url(spritesmith-main-7.png); + background-position: -742px 0px; + width: 105px; + height: 105px; +} +.Mount_Body_Cheetah-Desert { + background-image: url(spritesmith-main-7.png); + background-position: -742px -106px; + width: 105px; + height: 105px; +} +.Mount_Body_Cheetah-Golden { + background-image: url(spritesmith-main-7.png); + background-position: -742px -212px; + width: 105px; + height: 105px; +} +.Mount_Body_Cheetah-Red { + background-image: url(spritesmith-main-7.png); + background-position: -742px -318px; + width: 105px; + height: 105px; +} +.Mount_Body_Cheetah-Shade { + background-image: url(spritesmith-main-7.png); + background-position: -742px -424px; + width: 105px; + height: 105px; +} +.Mount_Body_Cheetah-Skeleton { + background-image: url(spritesmith-main-7.png); + background-position: -742px -530px; + width: 105px; + height: 105px; +} +.Mount_Body_Cheetah-White { + background-image: url(spritesmith-main-7.png); + background-position: 0px -681px; + width: 105px; + height: 105px; +} +.Mount_Body_Cheetah-Zombie { + background-image: url(spritesmith-main-7.png); + background-position: -106px -681px; + width: 105px; + height: 105px; +} +.Mount_Body_Cuttlefish-Base { + background-image: url(spritesmith-main-7.png); + background-position: -530px -115px; + width: 105px; + height: 114px; +} +.Mount_Body_Cuttlefish-CottonCandyBlue { + background-image: url(spritesmith-main-7.png); + background-position: -318px -239px; + width: 105px; + height: 114px; +} +.Mount_Body_Cuttlefish-CottonCandyPink { + background-image: url(spritesmith-main-7.png); + background-position: -212px 0px; + width: 105px; + height: 114px; +} +.Mount_Body_Cuttlefish-Desert { + background-image: url(spritesmith-main-7.png); + background-position: 0px -124px; + width: 105px; + height: 114px; +} +.Mount_Body_Cuttlefish-Golden { + background-image: url(spritesmith-main-7.png); + background-position: -106px -124px; + width: 105px; + height: 114px; +} +.Mount_Body_Cuttlefish-Red { + background-image: url(spritesmith-main-7.png); + background-position: -212px -124px; + width: 105px; + height: 114px; +} +.Mount_Body_Cuttlefish-Shade { + background-image: url(spritesmith-main-7.png); + background-position: -318px 0px; + width: 105px; + height: 114px; +} +.Mount_Body_Cuttlefish-Skeleton { + background-image: url(spritesmith-main-7.png); + background-position: -318px -115px; + width: 105px; + height: 114px; +} +.Mount_Body_Cuttlefish-White { + background-image: url(spritesmith-main-7.png); + background-position: 0px -239px; + width: 105px; + height: 114px; +} +.Mount_Body_Cuttlefish-Zombie { + background-image: url(spritesmith-main-7.png); + background-position: -106px -239px; + width: 105px; + height: 114px; +} +.Mount_Body_Deer-Base { background-image: url(spritesmith-main-7.png); background-position: -848px -424px; width: 105px; height: 105px; } -.Mount_Body_Dragon-Base { +.Mount_Body_Deer-CottonCandyBlue { background-image: url(spritesmith-main-7.png); background-position: -848px -530px; width: 105px; height: 105px; } -.Mount_Body_Dragon-CottonCandyBlue { +.Mount_Body_Deer-CottonCandyPink { background-image: url(spritesmith-main-7.png); background-position: -848px -636px; width: 105px; height: 105px; } -.Mount_Body_Dragon-CottonCandyPink { +.Mount_Body_Deer-Desert { background-image: url(spritesmith-main-7.png); background-position: 0px -787px; width: 105px; height: 105px; } -.Mount_Body_Dragon-Desert { +.Mount_Body_Deer-Golden { background-image: url(spritesmith-main-7.png); background-position: -106px -787px; width: 105px; height: 105px; } -.Mount_Body_Dragon-Floral { +.Mount_Body_Deer-Red { background-image: url(spritesmith-main-7.png); background-position: -212px -787px; width: 105px; height: 105px; } -.Mount_Body_Dragon-Golden { +.Mount_Body_Deer-Shade { background-image: url(spritesmith-main-7.png); background-position: -318px -787px; width: 105px; height: 105px; } -.Mount_Body_Dragon-Peppermint { +.Mount_Body_Deer-Skeleton { background-image: url(spritesmith-main-7.png); background-position: -424px -787px; width: 105px; height: 105px; } -.Mount_Body_Dragon-Red { +.Mount_Body_Deer-White { background-image: url(spritesmith-main-7.png); background-position: -530px -787px; width: 105px; height: 105px; } -.Mount_Body_Dragon-Shade { +.Mount_Body_Deer-Zombie { background-image: url(spritesmith-main-7.png); background-position: -636px -787px; width: 105px; height: 105px; } -.Mount_Body_Dragon-Skeleton { +.Mount_Body_Dragon-Base { background-image: url(spritesmith-main-7.png); background-position: -742px -787px; width: 105px; height: 105px; } -.Mount_Body_Dragon-Spooky { +.Mount_Body_Dragon-CottonCandyBlue { background-image: url(spritesmith-main-7.png); background-position: -848px -787px; width: 105px; height: 105px; } -.Mount_Body_Dragon-White { +.Mount_Body_Dragon-CottonCandyPink { background-image: url(spritesmith-main-7.png); background-position: -954px 0px; width: 105px; height: 105px; } -.Mount_Body_Dragon-Zombie { +.Mount_Body_Dragon-Desert { background-image: url(spritesmith-main-7.png); background-position: -954px -106px; width: 105px; height: 105px; } -.Mount_Body_Egg-Base { +.Mount_Body_Dragon-Floral { background-image: url(spritesmith-main-7.png); background-position: -954px -212px; width: 105px; height: 105px; } -.Mount_Body_Egg-CottonCandyBlue { +.Mount_Body_Dragon-Golden { background-image: url(spritesmith-main-7.png); background-position: -954px -318px; width: 105px; height: 105px; } -.Mount_Body_Egg-CottonCandyPink { +.Mount_Body_Dragon-Peppermint { background-image: url(spritesmith-main-7.png); background-position: -954px -424px; width: 105px; height: 105px; } -.Mount_Body_Egg-Desert { +.Mount_Body_Dragon-Red { background-image: url(spritesmith-main-7.png); background-position: -954px -530px; width: 105px; height: 105px; } -.Mount_Body_Egg-Golden { +.Mount_Body_Dragon-Shade { background-image: url(spritesmith-main-7.png); background-position: -954px -636px; width: 105px; height: 105px; } -.Mount_Body_Egg-Red { +.Mount_Body_Dragon-Skeleton { background-image: url(spritesmith-main-7.png); background-position: -954px -742px; width: 105px; height: 105px; } -.Mount_Body_Egg-Shade { +.Mount_Body_Dragon-Spooky { background-image: url(spritesmith-main-7.png); background-position: 0px -893px; width: 105px; height: 105px; } -.Mount_Body_Egg-Skeleton { +.Mount_Body_Dragon-White { background-image: url(spritesmith-main-7.png); background-position: -106px -893px; width: 105px; height: 105px; } -.Mount_Body_Egg-White { +.Mount_Body_Dragon-Zombie { background-image: url(spritesmith-main-7.png); background-position: -212px -893px; width: 105px; height: 105px; } -.Mount_Body_Egg-Zombie { +.Mount_Body_Egg-Base { background-image: url(spritesmith-main-7.png); background-position: -318px -893px; width: 105px; height: 105px; } -.Mount_Body_Falcon-Base { +.Mount_Body_Egg-CottonCandyBlue { background-image: url(spritesmith-main-7.png); background-position: -424px -893px; width: 105px; height: 105px; } -.Mount_Body_Falcon-CottonCandyBlue { +.Mount_Body_Egg-CottonCandyPink { background-image: url(spritesmith-main-7.png); background-position: -530px -893px; width: 105px; height: 105px; } -.Mount_Body_Falcon-CottonCandyPink { +.Mount_Body_Egg-Desert { background-image: url(spritesmith-main-7.png); background-position: -636px -893px; width: 105px; height: 105px; } -.Mount_Body_Falcon-Desert { +.Mount_Body_Egg-Golden { background-image: url(spritesmith-main-7.png); background-position: -742px -893px; width: 105px; height: 105px; } -.Mount_Body_Falcon-Golden { +.Mount_Body_Egg-Red { background-image: url(spritesmith-main-7.png); background-position: -848px -893px; width: 105px; height: 105px; } -.Mount_Body_Falcon-Red { +.Mount_Body_Egg-Shade { background-image: url(spritesmith-main-7.png); background-position: -954px -893px; width: 105px; height: 105px; } -.Mount_Body_Falcon-Shade { +.Mount_Body_Egg-Skeleton { background-image: url(spritesmith-main-7.png); background-position: -1060px 0px; width: 105px; height: 105px; } -.Mount_Body_Falcon-Skeleton { +.Mount_Body_Egg-White { background-image: url(spritesmith-main-7.png); background-position: -1060px -106px; width: 105px; height: 105px; } -.Mount_Body_Falcon-White { +.Mount_Body_Egg-Zombie { background-image: url(spritesmith-main-7.png); background-position: -1060px -212px; width: 105px; height: 105px; } -.Mount_Body_Falcon-Zombie { +.Mount_Body_Falcon-Base { background-image: url(spritesmith-main-7.png); background-position: -1060px -318px; width: 105px; height: 105px; } -.Mount_Body_FlyingPig-Base { +.Mount_Body_Falcon-CottonCandyBlue { background-image: url(spritesmith-main-7.png); background-position: -1060px -424px; width: 105px; height: 105px; } -.Mount_Body_FlyingPig-CottonCandyBlue { +.Mount_Body_Falcon-CottonCandyPink { background-image: url(spritesmith-main-7.png); background-position: -1060px -530px; width: 105px; height: 105px; } -.Mount_Body_FlyingPig-CottonCandyPink { +.Mount_Body_Falcon-Desert { background-image: url(spritesmith-main-7.png); background-position: -1060px -636px; width: 105px; height: 105px; } -.Mount_Body_FlyingPig-Desert { +.Mount_Body_Falcon-Golden { background-image: url(spritesmith-main-7.png); background-position: -1060px -742px; width: 105px; height: 105px; } -.Mount_Body_FlyingPig-Floral { +.Mount_Body_Falcon-Red { background-image: url(spritesmith-main-7.png); background-position: -1060px -848px; width: 105px; height: 105px; } -.Mount_Body_FlyingPig-Golden { +.Mount_Body_Falcon-Shade { background-image: url(spritesmith-main-7.png); background-position: 0px -999px; width: 105px; height: 105px; } -.Mount_Body_FlyingPig-Peppermint { +.Mount_Body_Falcon-Skeleton { background-image: url(spritesmith-main-7.png); background-position: -106px -999px; width: 105px; height: 105px; } -.Mount_Body_FlyingPig-Red { +.Mount_Body_Falcon-White { background-image: url(spritesmith-main-7.png); background-position: -212px -999px; width: 105px; height: 105px; } -.Mount_Body_FlyingPig-Shade { +.Mount_Body_Falcon-Zombie { background-image: url(spritesmith-main-7.png); background-position: -318px -999px; width: 105px; height: 105px; } -.Mount_Body_FlyingPig-Skeleton { +.Mount_Body_FlyingPig-Base { background-image: url(spritesmith-main-7.png); background-position: -424px -999px; width: 105px; height: 105px; } -.Mount_Body_FlyingPig-Spooky { +.Mount_Body_FlyingPig-CottonCandyBlue { background-image: url(spritesmith-main-7.png); background-position: -530px -999px; width: 105px; height: 105px; } -.Mount_Body_FlyingPig-White { +.Mount_Body_FlyingPig-CottonCandyPink { background-image: url(spritesmith-main-7.png); background-position: -636px -999px; width: 105px; height: 105px; } -.Mount_Body_FlyingPig-Zombie { +.Mount_Body_FlyingPig-Desert { background-image: url(spritesmith-main-7.png); background-position: -742px -999px; width: 105px; height: 105px; } -.Mount_Body_Fox-Base { +.Mount_Body_FlyingPig-Floral { background-image: url(spritesmith-main-7.png); background-position: -848px -999px; width: 105px; height: 105px; } -.Mount_Body_Fox-CottonCandyBlue { +.Mount_Body_FlyingPig-Golden { background-image: url(spritesmith-main-7.png); background-position: -954px -999px; width: 105px; height: 105px; } -.Mount_Body_Fox-CottonCandyPink { +.Mount_Body_FlyingPig-Peppermint { background-image: url(spritesmith-main-7.png); background-position: -1060px -999px; width: 105px; height: 105px; } -.Mount_Body_Fox-Desert { +.Mount_Body_FlyingPig-Red { background-image: url(spritesmith-main-7.png); background-position: -1166px 0px; width: 105px; height: 105px; } -.Mount_Body_Fox-Floral { +.Mount_Body_FlyingPig-Shade { background-image: url(spritesmith-main-7.png); background-position: -1166px -106px; width: 105px; height: 105px; } -.Mount_Body_Fox-Golden { +.Mount_Body_FlyingPig-Skeleton { background-image: url(spritesmith-main-7.png); background-position: -1166px -212px; width: 105px; height: 105px; } -.Mount_Body_Fox-Peppermint { +.Mount_Body_FlyingPig-Spooky { background-image: url(spritesmith-main-7.png); background-position: -1166px -318px; width: 105px; height: 105px; } -.Mount_Body_Fox-Red { +.Mount_Body_FlyingPig-White { background-image: url(spritesmith-main-7.png); background-position: -1166px -424px; width: 105px; height: 105px; } -.Mount_Body_Fox-Shade { +.Mount_Body_FlyingPig-Zombie { background-image: url(spritesmith-main-7.png); background-position: -1166px -530px; width: 105px; height: 105px; } -.Mount_Body_Fox-Skeleton { +.Mount_Body_Fox-Base { background-image: url(spritesmith-main-7.png); background-position: -1166px -636px; width: 105px; height: 105px; } -.Mount_Body_Fox-Spooky { +.Mount_Body_Fox-CottonCandyBlue { background-image: url(spritesmith-main-7.png); background-position: -1166px -742px; width: 105px; height: 105px; } -.Mount_Body_Fox-White { +.Mount_Body_Fox-CottonCandyPink { background-image: url(spritesmith-main-7.png); background-position: -1166px -848px; width: 105px; height: 105px; } -.Mount_Body_Fox-Zombie { +.Mount_Body_Fox-Desert { background-image: url(spritesmith-main-7.png); background-position: -1166px -954px; width: 105px; height: 105px; } +.Mount_Body_Fox-Floral { + background-image: url(spritesmith-main-7.png); + background-position: 0px -1105px; + width: 105px; + height: 105px; +} +.Mount_Body_Fox-Golden { + background-image: url(spritesmith-main-7.png); + background-position: -106px -1105px; + width: 105px; + height: 105px; +} +.Mount_Body_Fox-Peppermint { + background-image: url(spritesmith-main-7.png); + background-position: -212px -1105px; + width: 105px; + height: 105px; +} +.Mount_Body_Fox-Red { + background-image: url(spritesmith-main-7.png); + background-position: -530px -230px; + width: 105px; + height: 105px; +} +.Mount_Body_Fox-Shade { + background-image: url(spritesmith-main-7.png); + background-position: -424px -1105px; + width: 105px; + height: 105px; +} +.Mount_Body_Fox-Skeleton { + background-image: url(spritesmith-main-7.png); + background-position: -530px -1105px; + width: 105px; + height: 105px; +} +.Mount_Body_Fox-Spooky { + background-image: url(spritesmith-main-7.png); + background-position: -636px -1105px; + width: 105px; + height: 105px; +} +.Mount_Body_Fox-White { + background-image: url(spritesmith-main-7.png); + background-position: -742px -1105px; + width: 105px; + height: 105px; +} +.Mount_Body_Fox-Zombie { + background-image: url(spritesmith-main-7.png); + background-position: -848px -1105px; + width: 105px; + height: 105px; +} .Mount_Body_Frog-Base { background-image: url(spritesmith-main-7.png); - background-position: -318px -239px; + background-position: -212px -239px; width: 105px; height: 114px; } @@ -726,13 +780,13 @@ } .Mount_Body_Frog-CottonCandyPink { background-image: url(spritesmith-main-7.png); - background-position: -424px -115px; + background-position: -424px 0px; width: 105px; height: 114px; } .Mount_Body_Frog-Desert { background-image: url(spritesmith-main-7.png); - background-position: -530px 0px; + background-position: -424px -115px; width: 105px; height: 114px; } @@ -774,187 +828,187 @@ } .Mount_Body_Gryphon-Base { background-image: url(spritesmith-main-7.png); - background-position: -1060px -1105px; + background-position: -1272px -742px; width: 105px; height: 105px; } .Mount_Body_Gryphon-CottonCandyBlue { background-image: url(spritesmith-main-7.png); - background-position: -1166px -1105px; + background-position: -1272px -848px; width: 105px; height: 105px; } .Mount_Body_Gryphon-CottonCandyPink { background-image: url(spritesmith-main-7.png); - background-position: -1272px 0px; + background-position: -1272px -954px; width: 105px; height: 105px; } .Mount_Body_Gryphon-Desert { background-image: url(spritesmith-main-7.png); - background-position: -1272px -106px; + background-position: -1272px -1060px; width: 105px; height: 105px; } .Mount_Body_Gryphon-Golden { background-image: url(spritesmith-main-7.png); - background-position: -1272px -212px; + background-position: 0px -1211px; width: 105px; height: 105px; } .Mount_Body_Gryphon-Red { background-image: url(spritesmith-main-7.png); - background-position: -1272px -318px; + background-position: -106px -1211px; width: 105px; height: 105px; } .Mount_Body_Gryphon-RoyalPurple { background-image: url(spritesmith-main-7.png); - background-position: -1272px -424px; + background-position: -212px -1211px; width: 105px; height: 105px; } .Mount_Body_Gryphon-Shade { background-image: url(spritesmith-main-7.png); - background-position: -1272px -530px; + background-position: -318px -1211px; width: 105px; height: 105px; } .Mount_Body_Gryphon-Skeleton { background-image: url(spritesmith-main-7.png); - background-position: -1272px -636px; + background-position: -424px -1211px; width: 105px; height: 105px; } .Mount_Body_Gryphon-White { background-image: url(spritesmith-main-7.png); - background-position: -1272px -742px; + background-position: -530px -1211px; width: 105px; height: 105px; } .Mount_Body_Gryphon-Zombie { background-image: url(spritesmith-main-7.png); - background-position: -1272px -848px; + background-position: -636px -1211px; width: 105px; height: 105px; } .Mount_Body_Hedgehog-Base { background-image: url(spritesmith-main-7.png); - background-position: -1272px -954px; + background-position: -742px -1211px; width: 105px; height: 105px; } .Mount_Body_Hedgehog-CottonCandyBlue { background-image: url(spritesmith-main-7.png); - background-position: -1272px -1060px; + background-position: -848px -1211px; width: 105px; height: 105px; } .Mount_Body_Hedgehog-CottonCandyPink { background-image: url(spritesmith-main-7.png); - background-position: 0px -1211px; + background-position: -954px -1211px; width: 105px; height: 105px; } .Mount_Body_Hedgehog-Desert { background-image: url(spritesmith-main-7.png); - background-position: -106px -1211px; + background-position: -1060px -1211px; width: 105px; height: 105px; } .Mount_Body_Hedgehog-Golden { background-image: url(spritesmith-main-7.png); - background-position: -212px -1211px; + background-position: -1166px -1211px; width: 105px; height: 105px; } .Mount_Body_Hedgehog-Red { background-image: url(spritesmith-main-7.png); - background-position: -318px -1211px; + background-position: -1272px -1211px; width: 105px; height: 105px; } .Mount_Body_Hedgehog-Shade { background-image: url(spritesmith-main-7.png); - background-position: -424px -1211px; + background-position: -1378px 0px; width: 105px; height: 105px; } .Mount_Body_Hedgehog-Skeleton { background-image: url(spritesmith-main-7.png); - background-position: -530px -1211px; + background-position: -1378px -106px; width: 105px; height: 105px; } .Mount_Body_Hedgehog-White { background-image: url(spritesmith-main-7.png); - background-position: -636px -1211px; + background-position: -1378px -212px; width: 105px; height: 105px; } .Mount_Body_Hedgehog-Zombie { background-image: url(spritesmith-main-7.png); - background-position: -742px -1211px; + background-position: -1378px -318px; width: 105px; height: 105px; } .Mount_Body_Horse-Base { background-image: url(spritesmith-main-7.png); - background-position: -848px -1211px; + background-position: -1378px -424px; width: 105px; height: 105px; } .Mount_Body_Horse-CottonCandyBlue { background-image: url(spritesmith-main-7.png); - background-position: -954px -1211px; + background-position: -1378px -530px; width: 105px; height: 105px; } .Mount_Body_Horse-CottonCandyPink { background-image: url(spritesmith-main-7.png); - background-position: -1060px -1211px; + background-position: -1378px -636px; width: 105px; height: 105px; } .Mount_Body_Horse-Desert { background-image: url(spritesmith-main-7.png); - background-position: -1166px -1211px; + background-position: -1378px -742px; width: 105px; height: 105px; } .Mount_Body_Horse-Golden { background-image: url(spritesmith-main-7.png); - background-position: -1272px -1211px; + background-position: -1378px -848px; width: 105px; height: 105px; } .Mount_Body_Horse-Red { background-image: url(spritesmith-main-7.png); - background-position: -1378px 0px; + background-position: -1378px -954px; width: 105px; height: 105px; } .Mount_Body_Horse-Shade { background-image: url(spritesmith-main-7.png); - background-position: -1378px -106px; + background-position: -1378px -1060px; width: 105px; height: 105px; } .Mount_Body_Horse-Skeleton { background-image: url(spritesmith-main-7.png); - background-position: -1378px -212px; + background-position: -1378px -1166px; width: 105px; height: 105px; } .Mount_Body_Horse-White { background-image: url(spritesmith-main-7.png); - background-position: -1378px -318px; + background-position: 0px -1317px; width: 105px; height: 105px; } .Mount_Body_Horse-Zombie { background-image: url(spritesmith-main-7.png); - background-position: -1378px -424px; + background-position: -106px -1317px; width: 105px; height: 105px; } @@ -966,61 +1020,61 @@ } .Mount_Body_LionCub-Base { background-image: url(spritesmith-main-7.png); - background-position: -1378px -636px; + background-position: -318px -1317px; width: 105px; height: 105px; } .Mount_Body_LionCub-CottonCandyBlue { background-image: url(spritesmith-main-7.png); - background-position: -1378px -742px; + background-position: -424px -1317px; width: 105px; height: 105px; } .Mount_Body_LionCub-CottonCandyPink { background-image: url(spritesmith-main-7.png); - background-position: -1378px -848px; + background-position: -530px -1317px; width: 105px; height: 105px; } .Mount_Body_LionCub-Desert { background-image: url(spritesmith-main-7.png); - background-position: -1378px -954px; + background-position: -636px -1317px; width: 105px; height: 105px; } .Mount_Body_LionCub-Ethereal { background-image: url(spritesmith-main-7.png); - background-position: -1378px -1060px; + background-position: -742px -1317px; width: 105px; height: 105px; } .Mount_Body_LionCub-Floral { background-image: url(spritesmith-main-7.png); - background-position: -1378px -1166px; + background-position: -848px -1317px; width: 105px; height: 105px; } .Mount_Body_LionCub-Golden { background-image: url(spritesmith-main-7.png); - background-position: 0px -1317px; + background-position: -954px -1317px; width: 105px; height: 105px; } .Mount_Body_LionCub-Peppermint { background-image: url(spritesmith-main-7.png); - background-position: -106px -1317px; + background-position: -1060px -1317px; width: 105px; height: 105px; } .Mount_Body_LionCub-Red { background-image: url(spritesmith-main-7.png); - background-position: -212px -1317px; + background-position: -1166px -1317px; width: 105px; height: 105px; } .Mount_Body_LionCub-Shade { background-image: url(spritesmith-main-7.png); - background-position: -318px -1317px; + background-position: -1272px -1317px; width: 105px; height: 105px; } @@ -1032,25 +1086,25 @@ } .Mount_Body_LionCub-Spooky { background-image: url(spritesmith-main-7.png); - background-position: -530px -1317px; + background-position: -1484px 0px; width: 105px; height: 105px; } .Mount_Body_LionCub-White { background-image: url(spritesmith-main-7.png); - background-position: -636px -1317px; + background-position: -1484px -106px; width: 105px; height: 105px; } .Mount_Body_LionCub-Zombie { background-image: url(spritesmith-main-7.png); - background-position: -742px -1317px; + background-position: -1484px -212px; width: 105px; height: 105px; } .Mount_Body_MagicalBee-Base { background-image: url(spritesmith-main-7.png); - background-position: -530px -115px; + background-position: -530px 0px; width: 105px; height: 114px; } @@ -1068,401 +1122,347 @@ } .Mount_Body_Monkey-Base { background-image: url(spritesmith-main-7.png); - background-position: -1166px -1317px; + background-position: -1484px -636px; width: 105px; height: 105px; } .Mount_Body_Monkey-CottonCandyBlue { background-image: url(spritesmith-main-7.png); - background-position: -1272px -1317px; + background-position: -1484px -742px; width: 105px; height: 105px; } .Mount_Body_Monkey-CottonCandyPink { background-image: url(spritesmith-main-7.png); - background-position: -1378px -1317px; + background-position: -1484px -848px; width: 105px; height: 105px; } .Mount_Body_Monkey-Desert { background-image: url(spritesmith-main-7.png); - background-position: -1484px 0px; + background-position: -1484px -954px; width: 105px; height: 105px; } .Mount_Body_Monkey-Golden { background-image: url(spritesmith-main-7.png); - background-position: -1484px -106px; + background-position: -1484px -1060px; width: 105px; height: 105px; } .Mount_Body_Monkey-Red { background-image: url(spritesmith-main-7.png); - background-position: -1484px -212px; + background-position: -1484px -1166px; width: 105px; height: 105px; } .Mount_Body_Monkey-Shade { background-image: url(spritesmith-main-7.png); - background-position: -1484px -318px; + background-position: -1484px -1272px; width: 105px; height: 105px; } .Mount_Body_Monkey-Skeleton { background-image: url(spritesmith-main-7.png); - background-position: -1484px -424px; + background-position: 0px -1423px; width: 105px; height: 105px; } .Mount_Body_Monkey-White { background-image: url(spritesmith-main-7.png); - background-position: -1484px -530px; + background-position: -106px -1423px; width: 105px; height: 105px; } .Mount_Body_Monkey-Zombie { background-image: url(spritesmith-main-7.png); - background-position: -1484px -636px; + background-position: -212px -1423px; width: 105px; height: 105px; } .Mount_Body_Octopus-Base { background-image: url(spritesmith-main-7.png); - background-position: -1484px -742px; + background-position: -318px -1423px; width: 105px; height: 105px; } .Mount_Body_Octopus-CottonCandyBlue { background-image: url(spritesmith-main-7.png); - background-position: -1484px -848px; + background-position: -424px -1423px; width: 105px; height: 105px; } .Mount_Body_Octopus-CottonCandyPink { background-image: url(spritesmith-main-7.png); - background-position: -1484px -954px; + background-position: -530px -1423px; width: 105px; height: 105px; } .Mount_Body_Octopus-Desert { background-image: url(spritesmith-main-7.png); - background-position: -1484px -1060px; + background-position: -636px -1423px; width: 105px; height: 105px; } .Mount_Body_Octopus-Golden { background-image: url(spritesmith-main-7.png); - background-position: -1484px -1166px; + background-position: -742px -1423px; width: 105px; height: 105px; } .Mount_Body_Octopus-Red { background-image: url(spritesmith-main-7.png); - background-position: -1484px -1272px; + background-position: -848px -1423px; width: 105px; height: 105px; } .Mount_Body_Octopus-Shade { background-image: url(spritesmith-main-7.png); - background-position: 0px -1423px; + background-position: -954px -1423px; width: 105px; height: 105px; } .Mount_Body_Octopus-Skeleton { background-image: url(spritesmith-main-7.png); - background-position: -106px -1423px; + background-position: -1060px -1423px; width: 105px; height: 105px; } .Mount_Body_Octopus-White { background-image: url(spritesmith-main-7.png); - background-position: -212px -1423px; + background-position: -1166px -1423px; width: 105px; height: 105px; } .Mount_Body_Octopus-Zombie { background-image: url(spritesmith-main-7.png); - background-position: -318px -1423px; + background-position: -1272px -1423px; width: 105px; height: 105px; } .Mount_Body_Orca-Base { background-image: url(spritesmith-main-7.png); - background-position: -424px -1423px; + background-position: -1378px -1423px; width: 105px; height: 105px; } .Mount_Body_Owl-Base { background-image: url(spritesmith-main-7.png); - background-position: -530px -1423px; + background-position: -1484px -1423px; width: 105px; height: 105px; } .Mount_Body_Owl-CottonCandyBlue { background-image: url(spritesmith-main-7.png); - background-position: -636px -1423px; + background-position: -1590px 0px; width: 105px; height: 105px; } .Mount_Body_Owl-CottonCandyPink { background-image: url(spritesmith-main-7.png); - background-position: -742px -1423px; + background-position: -1590px -106px; width: 105px; height: 105px; } .Mount_Body_Owl-Desert { background-image: url(spritesmith-main-7.png); - background-position: -848px -1423px; + background-position: -1590px -212px; width: 105px; height: 105px; } .Mount_Body_Owl-Golden { background-image: url(spritesmith-main-7.png); - background-position: -954px -1423px; + background-position: -1590px -318px; width: 105px; height: 105px; } .Mount_Body_Owl-Red { background-image: url(spritesmith-main-7.png); - background-position: -1060px -1423px; + background-position: -1590px -424px; width: 105px; height: 105px; } .Mount_Body_Owl-Shade { background-image: url(spritesmith-main-7.png); - background-position: -1166px -1423px; + background-position: -1590px -530px; width: 105px; height: 105px; } .Mount_Body_Owl-Skeleton { background-image: url(spritesmith-main-7.png); - background-position: -1272px -1423px; + background-position: -1590px -636px; width: 105px; height: 105px; } .Mount_Body_Owl-White { background-image: url(spritesmith-main-7.png); - background-position: -1378px -1423px; + background-position: -1590px -742px; width: 105px; height: 105px; } .Mount_Body_Owl-Zombie { background-image: url(spritesmith-main-7.png); - background-position: -1484px -1423px; + background-position: -1590px -848px; width: 105px; height: 105px; } .Mount_Body_PandaCub-Base { background-image: url(spritesmith-main-7.png); - background-position: -1590px 0px; + background-position: -1590px -954px; width: 105px; height: 105px; } .Mount_Body_PandaCub-CottonCandyBlue { background-image: url(spritesmith-main-7.png); - background-position: -1590px -106px; + background-position: -1590px -1060px; width: 105px; height: 105px; } .Mount_Body_PandaCub-CottonCandyPink { background-image: url(spritesmith-main-7.png); - background-position: -1590px -212px; + background-position: -1590px -1166px; width: 105px; height: 105px; } .Mount_Body_PandaCub-Desert { background-image: url(spritesmith-main-7.png); - background-position: -1590px -318px; + background-position: -1590px -1272px; width: 105px; height: 105px; } .Mount_Body_PandaCub-Floral { background-image: url(spritesmith-main-7.png); - background-position: -1590px -424px; + background-position: -1590px -1378px; width: 105px; height: 105px; } .Mount_Body_PandaCub-Golden { background-image: url(spritesmith-main-7.png); - background-position: -1590px -530px; + background-position: 0px -1529px; width: 105px; height: 105px; } .Mount_Body_PandaCub-Peppermint { background-image: url(spritesmith-main-7.png); - background-position: -1590px -636px; + background-position: -106px -1529px; width: 105px; height: 105px; } .Mount_Body_PandaCub-Red { background-image: url(spritesmith-main-7.png); - background-position: -1590px -742px; + background-position: -212px -1529px; width: 105px; height: 105px; } .Mount_Body_PandaCub-Shade { background-image: url(spritesmith-main-7.png); - background-position: -1590px -848px; + background-position: -318px -1529px; width: 105px; height: 105px; } .Mount_Body_PandaCub-Skeleton { background-image: url(spritesmith-main-7.png); - background-position: -1590px -954px; + background-position: -424px -1529px; width: 105px; height: 105px; } .Mount_Body_PandaCub-Spooky { background-image: url(spritesmith-main-7.png); - background-position: -1590px -1060px; + background-position: -530px -1529px; width: 105px; height: 105px; } .Mount_Body_PandaCub-White { background-image: url(spritesmith-main-7.png); - background-position: -1590px -1166px; + background-position: -636px -1529px; width: 105px; height: 105px; } .Mount_Body_PandaCub-Zombie { background-image: url(spritesmith-main-7.png); - background-position: -1590px -1272px; + background-position: -742px -1529px; width: 105px; height: 105px; } .Mount_Body_Parrot-Base { background-image: url(spritesmith-main-7.png); - background-position: -1590px -1378px; + background-position: -848px -1529px; width: 105px; height: 105px; } .Mount_Body_Parrot-CottonCandyBlue { background-image: url(spritesmith-main-7.png); - background-position: 0px -1529px; + background-position: -954px -1529px; width: 105px; height: 105px; } .Mount_Body_Parrot-CottonCandyPink { background-image: url(spritesmith-main-7.png); - background-position: -106px -1529px; + background-position: -1060px -1529px; width: 105px; height: 105px; } .Mount_Body_Parrot-Desert { background-image: url(spritesmith-main-7.png); - background-position: -212px -1529px; + background-position: -1166px -1529px; width: 105px; height: 105px; } .Mount_Body_Parrot-Golden { background-image: url(spritesmith-main-7.png); - background-position: -318px -1529px; + background-position: -1272px -1529px; width: 105px; height: 105px; } .Mount_Body_Parrot-Red { background-image: url(spritesmith-main-7.png); - background-position: -424px -1529px; + background-position: -1378px -1529px; width: 105px; height: 105px; } .Mount_Body_Parrot-Shade { background-image: url(spritesmith-main-7.png); - background-position: -530px -1529px; + background-position: -1484px -1529px; width: 105px; height: 105px; } .Mount_Body_Parrot-Skeleton { background-image: url(spritesmith-main-7.png); - background-position: -636px -1529px; + background-position: -1590px -1529px; width: 105px; height: 105px; } .Mount_Body_Parrot-White { background-image: url(spritesmith-main-7.png); - background-position: -742px -1529px; + background-position: -1696px 0px; width: 105px; height: 105px; } .Mount_Body_Parrot-Zombie { background-image: url(spritesmith-main-7.png); - background-position: -848px -1529px; + background-position: -1696px -106px; width: 105px; height: 105px; } .Mount_Body_Penguin-Base { background-image: url(spritesmith-main-7.png); - background-position: -954px -1529px; + background-position: -1696px -212px; width: 105px; height: 105px; } .Mount_Body_Penguin-CottonCandyBlue { background-image: url(spritesmith-main-7.png); - background-position: -1060px -1529px; + background-position: -1696px -318px; width: 105px; height: 105px; } .Mount_Body_Penguin-CottonCandyPink { background-image: url(spritesmith-main-7.png); - background-position: -1166px -1529px; + background-position: -212px -1317px; width: 105px; height: 105px; } .Mount_Body_Penguin-Desert { - background-image: url(spritesmith-main-7.png); - background-position: -1272px -1529px; - width: 105px; - height: 105px; -} -.Mount_Body_Penguin-Golden { - background-image: url(spritesmith-main-7.png); - background-position: -1378px -1529px; - width: 105px; - height: 105px; -} -.Mount_Body_Penguin-Red { - background-image: url(spritesmith-main-7.png); - background-position: -1484px -1529px; - width: 105px; - height: 105px; -} -.Mount_Body_Penguin-Shade { - background-image: url(spritesmith-main-7.png); - background-position: -1590px -1529px; - width: 105px; - height: 105px; -} -.Mount_Body_Penguin-Skeleton { - background-image: url(spritesmith-main-7.png); - background-position: -1696px 0px; - width: 105px; - height: 105px; -} -.Mount_Body_Penguin-White { - background-image: url(spritesmith-main-7.png); - background-position: -1696px -106px; - width: 105px; - height: 105px; -} -.Mount_Body_Penguin-Zombie { - background-image: url(spritesmith-main-7.png); - background-position: -1696px -212px; - width: 105px; - height: 105px; -} -.Mount_Body_Phoenix-Base { - background-image: url(spritesmith-main-7.png); - background-position: -1696px -318px; - width: 105px; - height: 105px; -} -.Mount_Body_Rat-Base { - background-image: url(spritesmith-main-7.png); - background-position: -1378px -530px; - width: 105px; - height: 105px; -} -.Mount_Body_Rat-CottonCandyBlue { background-image: url(spritesmith-main-7.png); background-position: -1696px -424px; width: 105px; diff --git a/common/dist/sprites/spritesmith-main-7.png b/common/dist/sprites/spritesmith-main-7.png index 4c5738a138..92d0019c29 100644 Binary files a/common/dist/sprites/spritesmith-main-7.png and b/common/dist/sprites/spritesmith-main-7.png differ diff --git a/common/dist/sprites/spritesmith-main-8.css b/common/dist/sprites/spritesmith-main-8.css index 3fb94d94a0..39fd3f7ca7 100644 --- a/common/dist/sprites/spritesmith-main-8.css +++ b/common/dist/sprites/spritesmith-main-8.css @@ -1,168 +1,222 @@ -.Mount_Body_Rat-CottonCandyPink { - background-image: url(spritesmith-main-8.png); - background-position: 0px -1452px; - width: 105px; - height: 105px; -} -.Mount_Body_Rat-Desert { - background-image: url(spritesmith-main-8.png); - background-position: -1240px -530px; - width: 105px; - height: 105px; -} -.Mount_Body_Rat-Golden { - background-image: url(spritesmith-main-8.png); - background-position: -106px -1452px; - width: 105px; - height: 105px; -} -.Mount_Body_Rat-Red { - background-image: url(spritesmith-main-8.png); - background-position: -212px -1452px; - width: 105px; - height: 105px; -} -.Mount_Body_Rat-Shade { - background-image: url(spritesmith-main-8.png); - background-position: -318px -1452px; - width: 105px; - height: 105px; -} -.Mount_Body_Rat-Skeleton { - background-image: url(spritesmith-main-8.png); - background-position: -424px -1452px; - width: 105px; - height: 105px; -} -.Mount_Body_Rat-White { - background-image: url(spritesmith-main-8.png); - background-position: -530px -1452px; - width: 105px; - height: 105px; -} -.Mount_Body_Rat-Zombie { - background-image: url(spritesmith-main-8.png); - background-position: -514px -680px; - width: 105px; - height: 105px; -} -.Mount_Body_Rock-Base { - background-image: url(spritesmith-main-8.png); - background-position: -620px -680px; - width: 105px; - height: 105px; -} -.Mount_Body_Rock-CottonCandyBlue { - background-image: url(spritesmith-main-8.png); - background-position: -816px 0px; - width: 105px; - height: 105px; -} -.Mount_Body_Rock-CottonCandyPink { +.Mount_Body_Penguin-Golden { background-image: url(spritesmith-main-8.png); background-position: -816px -106px; width: 105px; height: 105px; } -.Mount_Body_Rock-Desert { +.Mount_Body_Penguin-Red { background-image: url(spritesmith-main-8.png); - background-position: -212px -1240px; + background-position: -1240px -530px; width: 105px; height: 105px; } -.Mount_Body_Rock-Golden { +.Mount_Body_Penguin-Shade { background-image: url(spritesmith-main-8.png); - background-position: -318px -1240px; + background-position: -816px -212px; width: 105px; height: 105px; } -.Mount_Body_Rock-Red { +.Mount_Body_Penguin-Skeleton { background-image: url(spritesmith-main-8.png); - background-position: -424px -1240px; + background-position: -816px -318px; width: 105px; height: 105px; } -.Mount_Body_Rock-Shade { +.Mount_Body_Penguin-White { background-image: url(spritesmith-main-8.png); - background-position: -530px -1240px; + background-position: -816px -424px; width: 105px; height: 105px; } -.Mount_Body_Rock-Skeleton { +.Mount_Body_Penguin-Zombie { background-image: url(spritesmith-main-8.png); - background-position: -636px -1240px; + background-position: -816px -530px; width: 105px; height: 105px; } -.Mount_Body_Rock-White { +.Mount_Body_Phoenix-Base { background-image: url(spritesmith-main-8.png); - background-position: -742px -1240px; + background-position: -816px -636px; width: 105px; height: 105px; } -.Mount_Body_Rock-Zombie { +.Mount_Body_Rat-Base { background-image: url(spritesmith-main-8.png); - background-position: -848px -1240px; + background-position: 0px -816px; width: 105px; height: 105px; } -.Mount_Body_Rooster-Base { +.Mount_Body_Rat-CottonCandyBlue { background-image: url(spritesmith-main-8.png); - background-position: -954px -1240px; + background-position: -106px -816px; width: 105px; height: 105px; } -.Mount_Body_Rooster-CottonCandyBlue { +.Mount_Body_Rat-CottonCandyPink { background-image: url(spritesmith-main-8.png); - background-position: -1060px -1240px; + background-position: -212px -816px; width: 105px; height: 105px; } -.Mount_Body_Rooster-CottonCandyPink { +.Mount_Body_Rat-Desert { + background-image: url(spritesmith-main-8.png); + background-position: -318px -816px; + width: 105px; + height: 105px; +} +.Mount_Body_Rat-Golden { background-image: url(spritesmith-main-8.png); background-position: -1166px -1240px; width: 105px; height: 105px; } +.Mount_Body_Rat-Red { + background-image: url(spritesmith-main-8.png); + background-position: -1346px 0px; + width: 105px; + height: 105px; +} +.Mount_Body_Rat-Shade { + background-image: url(spritesmith-main-8.png); + background-position: -1346px -106px; + width: 105px; + height: 105px; +} +.Mount_Body_Rat-Skeleton { + background-image: url(spritesmith-main-8.png); + background-position: -1346px -212px; + width: 105px; + height: 105px; +} +.Mount_Body_Rat-White { + background-image: url(spritesmith-main-8.png); + background-position: -1346px -318px; + width: 105px; + height: 105px; +} +.Mount_Body_Rat-Zombie { + background-image: url(spritesmith-main-8.png); + background-position: -1346px -424px; + width: 105px; + height: 105px; +} +.Mount_Body_Rock-Base { + background-image: url(spritesmith-main-8.png); + background-position: -1346px -530px; + width: 105px; + height: 105px; +} +.Mount_Body_Rock-CottonCandyBlue { + background-image: url(spritesmith-main-8.png); + background-position: -1346px -636px; + width: 105px; + height: 105px; +} +.Mount_Body_Rock-CottonCandyPink { + background-image: url(spritesmith-main-8.png); + background-position: -1346px -742px; + width: 105px; + height: 105px; +} +.Mount_Body_Rock-Desert { + background-image: url(spritesmith-main-8.png); + background-position: -1346px -848px; + width: 105px; + height: 105px; +} +.Mount_Body_Rock-Golden { + background-image: url(spritesmith-main-8.png); + background-position: -212px -1452px; + width: 105px; + height: 105px; +} +.Mount_Body_Rock-Red { + background-image: url(spritesmith-main-8.png); + background-position: -318px -1452px; + width: 105px; + height: 105px; +} +.Mount_Body_Rock-Shade { + background-image: url(spritesmith-main-8.png); + background-position: -424px -1452px; + width: 105px; + height: 105px; +} +.Mount_Body_Rock-Skeleton { + background-image: url(spritesmith-main-8.png); + background-position: -530px -1452px; + width: 105px; + height: 105px; +} +.Mount_Body_Rock-White { + background-image: url(spritesmith-main-8.png); + background-position: -636px -1452px; + width: 105px; + height: 105px; +} +.Mount_Body_Rock-Zombie { + background-image: url(spritesmith-main-8.png); + background-position: -742px -1452px; + width: 105px; + height: 105px; +} +.Mount_Body_Rooster-Base { + background-image: url(spritesmith-main-8.png); + background-position: -848px -1452px; + width: 105px; + height: 105px; +} +.Mount_Body_Rooster-CottonCandyBlue { + background-image: url(spritesmith-main-8.png); + background-position: -954px -1452px; + width: 105px; + height: 105px; +} +.Mount_Body_Rooster-CottonCandyPink { + background-image: url(spritesmith-main-8.png); + background-position: -1060px -1452px; + width: 105px; + height: 105px; +} .Mount_Body_Rooster-Desert { background-image: url(spritesmith-main-8.png); - background-position: -1452px -636px; + background-position: -1166px -1452px; width: 105px; height: 105px; } .Mount_Body_Rooster-Golden { background-image: url(spritesmith-main-8.png); - background-position: -1452px -742px; + background-position: -1272px -1452px; width: 105px; height: 105px; } .Mount_Body_Rooster-Red { background-image: url(spritesmith-main-8.png); - background-position: -1452px -848px; + background-position: -1378px -1452px; width: 105px; height: 105px; } .Mount_Body_Rooster-Shade { background-image: url(spritesmith-main-8.png); - background-position: -1452px -954px; + background-position: -1558px 0px; width: 105px; height: 105px; } .Mount_Body_Rooster-Skeleton { background-image: url(spritesmith-main-8.png); - background-position: -1452px -1060px; + background-position: -514px -680px; width: 105px; height: 105px; } .Mount_Body_Rooster-White { background-image: url(spritesmith-main-8.png); - background-position: -1452px -1166px; + background-position: -620px -680px; width: 105px; height: 105px; } .Mount_Body_Rooster-Zombie { background-image: url(spritesmith-main-8.png); - background-position: -1452px -1272px; + background-position: -816px 0px; width: 105px; height: 105px; } @@ -228,361 +282,361 @@ } .Mount_Body_Seahorse-Base { background-image: url(spritesmith-main-8.png); - background-position: -816px -212px; + background-position: -424px -816px; width: 105px; height: 105px; } .Mount_Body_Seahorse-CottonCandyBlue { background-image: url(spritesmith-main-8.png); - background-position: -816px -318px; + background-position: -530px -816px; width: 105px; height: 105px; } .Mount_Body_Seahorse-CottonCandyPink { background-image: url(spritesmith-main-8.png); - background-position: -816px -424px; + background-position: -636px -816px; width: 105px; height: 105px; } .Mount_Body_Seahorse-Desert { background-image: url(spritesmith-main-8.png); - background-position: -816px -530px; + background-position: -742px -816px; width: 105px; height: 105px; } .Mount_Body_Seahorse-Golden { background-image: url(spritesmith-main-8.png); - background-position: -816px -636px; + background-position: -922px 0px; width: 105px; height: 105px; } .Mount_Body_Seahorse-Red { background-image: url(spritesmith-main-8.png); - background-position: 0px -816px; + background-position: -922px -106px; width: 105px; height: 105px; } .Mount_Body_Seahorse-Shade { background-image: url(spritesmith-main-8.png); - background-position: -106px -816px; + background-position: -922px -212px; width: 105px; height: 105px; } .Mount_Body_Seahorse-Skeleton { background-image: url(spritesmith-main-8.png); - background-position: -212px -816px; + background-position: -922px -318px; width: 105px; height: 105px; } .Mount_Body_Seahorse-White { background-image: url(spritesmith-main-8.png); - background-position: -318px -816px; + background-position: -922px -424px; width: 105px; height: 105px; } .Mount_Body_Seahorse-Zombie { background-image: url(spritesmith-main-8.png); - background-position: -424px -816px; + background-position: -922px -530px; width: 105px; height: 105px; } .Mount_Body_Sheep-Base { background-image: url(spritesmith-main-8.png); - background-position: -530px -816px; + background-position: -922px -636px; width: 105px; height: 105px; } .Mount_Body_Sheep-CottonCandyBlue { background-image: url(spritesmith-main-8.png); - background-position: -636px -816px; + background-position: -922px -742px; width: 105px; height: 105px; } .Mount_Body_Sheep-CottonCandyPink { background-image: url(spritesmith-main-8.png); - background-position: -742px -816px; + background-position: 0px -922px; width: 105px; height: 105px; } .Mount_Body_Sheep-Desert { background-image: url(spritesmith-main-8.png); - background-position: -922px 0px; + background-position: -106px -922px; width: 105px; height: 105px; } .Mount_Body_Sheep-Golden { background-image: url(spritesmith-main-8.png); - background-position: -922px -106px; + background-position: -212px -922px; width: 105px; height: 105px; } .Mount_Body_Sheep-Red { background-image: url(spritesmith-main-8.png); - background-position: -922px -212px; + background-position: -318px -922px; width: 105px; height: 105px; } .Mount_Body_Sheep-Shade { background-image: url(spritesmith-main-8.png); - background-position: -922px -318px; + background-position: -424px -922px; width: 105px; height: 105px; } .Mount_Body_Sheep-Skeleton { background-image: url(spritesmith-main-8.png); - background-position: -922px -424px; + background-position: -530px -922px; width: 105px; height: 105px; } .Mount_Body_Sheep-White { background-image: url(spritesmith-main-8.png); - background-position: -922px -530px; + background-position: -636px -922px; width: 105px; height: 105px; } .Mount_Body_Sheep-Zombie { background-image: url(spritesmith-main-8.png); - background-position: -922px -636px; + background-position: -742px -922px; width: 105px; height: 105px; } .Mount_Body_Slime-Base { background-image: url(spritesmith-main-8.png); - background-position: -922px -742px; + background-position: -848px -922px; width: 105px; height: 105px; } .Mount_Body_Slime-CottonCandyBlue { background-image: url(spritesmith-main-8.png); - background-position: 0px -922px; + background-position: -1028px 0px; width: 105px; height: 105px; } .Mount_Body_Slime-CottonCandyPink { background-image: url(spritesmith-main-8.png); - background-position: -106px -922px; + background-position: -1028px -106px; width: 105px; height: 105px; } .Mount_Body_Slime-Desert { background-image: url(spritesmith-main-8.png); - background-position: -212px -922px; + background-position: -1028px -212px; width: 105px; height: 105px; } .Mount_Body_Slime-Golden { background-image: url(spritesmith-main-8.png); - background-position: -318px -922px; + background-position: -1028px -318px; width: 105px; height: 105px; } .Mount_Body_Slime-Red { background-image: url(spritesmith-main-8.png); - background-position: -424px -922px; + background-position: -1028px -424px; width: 105px; height: 105px; } .Mount_Body_Slime-Shade { background-image: url(spritesmith-main-8.png); - background-position: -530px -922px; + background-position: -1028px -530px; width: 105px; height: 105px; } .Mount_Body_Slime-Skeleton { background-image: url(spritesmith-main-8.png); - background-position: -636px -922px; + background-position: -1028px -636px; width: 105px; height: 105px; } .Mount_Body_Slime-White { background-image: url(spritesmith-main-8.png); - background-position: -742px -922px; + background-position: -1028px -742px; width: 105px; height: 105px; } .Mount_Body_Slime-Zombie { background-image: url(spritesmith-main-8.png); - background-position: -848px -922px; + background-position: -1028px -848px; width: 105px; height: 105px; } .Mount_Body_Snail-Base { background-image: url(spritesmith-main-8.png); - background-position: -1028px 0px; + background-position: 0px -1028px; width: 105px; height: 105px; } .Mount_Body_Snail-CottonCandyBlue { background-image: url(spritesmith-main-8.png); - background-position: -1028px -106px; + background-position: -106px -1028px; width: 105px; height: 105px; } .Mount_Body_Snail-CottonCandyPink { background-image: url(spritesmith-main-8.png); - background-position: -1028px -212px; + background-position: -212px -1028px; width: 105px; height: 105px; } .Mount_Body_Snail-Desert { background-image: url(spritesmith-main-8.png); - background-position: -1028px -318px; + background-position: -318px -1028px; width: 105px; height: 105px; } .Mount_Body_Snail-Golden { background-image: url(spritesmith-main-8.png); - background-position: -1028px -424px; + background-position: -424px -1028px; width: 105px; height: 105px; } .Mount_Body_Snail-Red { background-image: url(spritesmith-main-8.png); - background-position: -1028px -530px; + background-position: -530px -1028px; width: 105px; height: 105px; } .Mount_Body_Snail-Shade { background-image: url(spritesmith-main-8.png); - background-position: -1028px -636px; + background-position: -636px -1028px; width: 105px; height: 105px; } .Mount_Body_Snail-Skeleton { background-image: url(spritesmith-main-8.png); - background-position: -1028px -742px; + background-position: -742px -1028px; width: 105px; height: 105px; } .Mount_Body_Snail-White { background-image: url(spritesmith-main-8.png); - background-position: -1028px -848px; + background-position: -848px -1028px; width: 105px; height: 105px; } .Mount_Body_Snail-Zombie { background-image: url(spritesmith-main-8.png); - background-position: 0px -1028px; + background-position: -954px -1028px; width: 105px; height: 105px; } .Mount_Body_Snake-Base { background-image: url(spritesmith-main-8.png); - background-position: -106px -1028px; + background-position: -1134px 0px; width: 105px; height: 105px; } .Mount_Body_Snake-CottonCandyBlue { background-image: url(spritesmith-main-8.png); - background-position: -212px -1028px; + background-position: -1134px -106px; width: 105px; height: 105px; } .Mount_Body_Snake-CottonCandyPink { background-image: url(spritesmith-main-8.png); - background-position: -318px -1028px; + background-position: -1134px -212px; width: 105px; height: 105px; } .Mount_Body_Snake-Desert { background-image: url(spritesmith-main-8.png); - background-position: -424px -1028px; + background-position: -1134px -318px; width: 105px; height: 105px; } .Mount_Body_Snake-Golden { background-image: url(spritesmith-main-8.png); - background-position: -530px -1028px; + background-position: -1134px -424px; width: 105px; height: 105px; } .Mount_Body_Snake-Red { background-image: url(spritesmith-main-8.png); - background-position: -636px -1028px; + background-position: -1134px -530px; width: 105px; height: 105px; } .Mount_Body_Snake-Shade { background-image: url(spritesmith-main-8.png); - background-position: -742px -1028px; + background-position: -1134px -636px; width: 105px; height: 105px; } .Mount_Body_Snake-Skeleton { background-image: url(spritesmith-main-8.png); - background-position: -848px -1028px; + background-position: -1134px -742px; width: 105px; height: 105px; } .Mount_Body_Snake-White { background-image: url(spritesmith-main-8.png); - background-position: -954px -1028px; + background-position: -1134px -848px; width: 105px; height: 105px; } .Mount_Body_Snake-Zombie { background-image: url(spritesmith-main-8.png); - background-position: -1134px 0px; + background-position: -1134px -954px; width: 105px; height: 105px; } .Mount_Body_Spider-Base { background-image: url(spritesmith-main-8.png); - background-position: -1134px -106px; + background-position: 0px -1134px; width: 105px; height: 105px; } .Mount_Body_Spider-CottonCandyBlue { background-image: url(spritesmith-main-8.png); - background-position: -1134px -212px; + background-position: -106px -1134px; width: 105px; height: 105px; } .Mount_Body_Spider-CottonCandyPink { background-image: url(spritesmith-main-8.png); - background-position: -1134px -318px; + background-position: -212px -1134px; width: 105px; height: 105px; } .Mount_Body_Spider-Desert { background-image: url(spritesmith-main-8.png); - background-position: -1134px -424px; + background-position: -318px -1134px; width: 105px; height: 105px; } .Mount_Body_Spider-Golden { background-image: url(spritesmith-main-8.png); - background-position: -1134px -530px; + background-position: -424px -1134px; width: 105px; height: 105px; } .Mount_Body_Spider-Red { background-image: url(spritesmith-main-8.png); - background-position: -1134px -636px; + background-position: -530px -1134px; width: 105px; height: 105px; } .Mount_Body_Spider-Shade { background-image: url(spritesmith-main-8.png); - background-position: -1134px -742px; + background-position: -636px -1134px; width: 105px; height: 105px; } .Mount_Body_Spider-Skeleton { background-image: url(spritesmith-main-8.png); - background-position: -1134px -848px; + background-position: -742px -1134px; width: 105px; height: 105px; } .Mount_Body_Spider-White { background-image: url(spritesmith-main-8.png); - background-position: -1134px -954px; + background-position: -848px -1134px; width: 105px; height: 105px; } .Mount_Body_Spider-Zombie { background-image: url(spritesmith-main-8.png); - background-position: 0px -1134px; + background-position: -954px -1134px; width: 105px; height: 105px; } @@ -648,325 +702,325 @@ } .Mount_Body_TigerCub-Base { background-image: url(spritesmith-main-8.png); - background-position: -106px -1134px; + background-position: -1060px -1134px; width: 105px; height: 105px; } .Mount_Body_TigerCub-CottonCandyBlue { background-image: url(spritesmith-main-8.png); - background-position: -212px -1134px; + background-position: -1240px 0px; width: 105px; height: 105px; } .Mount_Body_TigerCub-CottonCandyPink { background-image: url(spritesmith-main-8.png); - background-position: -318px -1134px; + background-position: -1240px -106px; width: 105px; height: 105px; } .Mount_Body_TigerCub-Desert { background-image: url(spritesmith-main-8.png); - background-position: -424px -1134px; + background-position: -1240px -212px; width: 105px; height: 105px; } .Mount_Body_TigerCub-Floral { background-image: url(spritesmith-main-8.png); - background-position: -530px -1134px; + background-position: -1240px -318px; width: 105px; height: 105px; } .Mount_Body_TigerCub-Golden { background-image: url(spritesmith-main-8.png); - background-position: -636px -1134px; + background-position: -1240px -424px; width: 105px; height: 105px; } .Mount_Body_TigerCub-Peppermint { background-image: url(spritesmith-main-8.png); - background-position: -742px -1134px; + background-position: -408px -680px; width: 105px; height: 105px; } .Mount_Body_TigerCub-Red { background-image: url(spritesmith-main-8.png); - background-position: -848px -1134px; + background-position: -1240px -636px; width: 105px; height: 105px; } .Mount_Body_TigerCub-Shade { background-image: url(spritesmith-main-8.png); - background-position: -954px -1134px; + background-position: -1240px -742px; width: 105px; height: 105px; } .Mount_Body_TigerCub-Skeleton { background-image: url(spritesmith-main-8.png); - background-position: -1060px -1134px; + background-position: -1240px -848px; width: 105px; height: 105px; } .Mount_Body_TigerCub-Spooky { background-image: url(spritesmith-main-8.png); - background-position: -1240px 0px; + background-position: -1240px -954px; width: 105px; height: 105px; } .Mount_Body_TigerCub-White { background-image: url(spritesmith-main-8.png); - background-position: -1240px -106px; + background-position: -1240px -1060px; width: 105px; height: 105px; } .Mount_Body_TigerCub-Zombie { background-image: url(spritesmith-main-8.png); - background-position: -1240px -212px; + background-position: 0px -1240px; width: 105px; height: 105px; } .Mount_Body_Treeling-Base { background-image: url(spritesmith-main-8.png); - background-position: -1240px -318px; + background-position: -106px -1240px; width: 105px; height: 105px; } .Mount_Body_Treeling-CottonCandyBlue { background-image: url(spritesmith-main-8.png); - background-position: -1240px -424px; + background-position: -212px -1240px; width: 105px; height: 105px; } .Mount_Body_Treeling-CottonCandyPink { background-image: url(spritesmith-main-8.png); - background-position: -408px -680px; + background-position: -318px -1240px; width: 105px; height: 105px; } .Mount_Body_Treeling-Desert { background-image: url(spritesmith-main-8.png); - background-position: -1240px -636px; + background-position: -424px -1240px; width: 105px; height: 105px; } .Mount_Body_Treeling-Golden { background-image: url(spritesmith-main-8.png); - background-position: -1240px -742px; + background-position: -530px -1240px; width: 105px; height: 105px; } .Mount_Body_Treeling-Red { background-image: url(spritesmith-main-8.png); - background-position: -1240px -848px; + background-position: -636px -1240px; width: 105px; height: 105px; } .Mount_Body_Treeling-Shade { background-image: url(spritesmith-main-8.png); - background-position: -1240px -954px; + background-position: -742px -1240px; width: 105px; height: 105px; } .Mount_Body_Treeling-Skeleton { background-image: url(spritesmith-main-8.png); - background-position: -1240px -1060px; + background-position: -848px -1240px; width: 105px; height: 105px; } .Mount_Body_Treeling-White { background-image: url(spritesmith-main-8.png); - background-position: 0px -1240px; + background-position: -954px -1240px; width: 105px; height: 105px; } .Mount_Body_Treeling-Zombie { background-image: url(spritesmith-main-8.png); - background-position: -106px -1240px; + background-position: -1060px -1240px; width: 105px; height: 105px; } .Mount_Body_Turkey-Base { background-image: url(spritesmith-main-8.png); - background-position: -1346px 0px; + background-position: -1346px -954px; width: 105px; height: 105px; } .Mount_Body_Turtle-Base { background-image: url(spritesmith-main-8.png); - background-position: -1346px -106px; + background-position: -1346px -1060px; width: 105px; height: 105px; } .Mount_Body_Turtle-CottonCandyBlue { background-image: url(spritesmith-main-8.png); - background-position: -1346px -212px; + background-position: -1346px -1166px; width: 105px; height: 105px; } .Mount_Body_Turtle-CottonCandyPink { background-image: url(spritesmith-main-8.png); - background-position: -1346px -318px; + background-position: 0px -1346px; width: 105px; height: 105px; } .Mount_Body_Turtle-Desert { background-image: url(spritesmith-main-8.png); - background-position: -1346px -424px; + background-position: -106px -1346px; width: 105px; height: 105px; } .Mount_Body_Turtle-Golden { background-image: url(spritesmith-main-8.png); - background-position: -1346px -530px; + background-position: -212px -1346px; width: 105px; height: 105px; } .Mount_Body_Turtle-Red { background-image: url(spritesmith-main-8.png); - background-position: -1346px -636px; + background-position: -318px -1346px; width: 105px; height: 105px; } .Mount_Body_Turtle-Shade { background-image: url(spritesmith-main-8.png); - background-position: -1346px -742px; + background-position: -424px -1346px; width: 105px; height: 105px; } .Mount_Body_Turtle-Skeleton { background-image: url(spritesmith-main-8.png); - background-position: -1346px -848px; + background-position: -530px -1346px; width: 105px; height: 105px; } .Mount_Body_Turtle-White { background-image: url(spritesmith-main-8.png); - background-position: -1346px -954px; + background-position: -636px -1346px; width: 105px; height: 105px; } .Mount_Body_Turtle-Zombie { background-image: url(spritesmith-main-8.png); - background-position: -1346px -1060px; + background-position: -742px -1346px; width: 105px; height: 105px; } .Mount_Body_Unicorn-Base { background-image: url(spritesmith-main-8.png); - background-position: -1346px -1166px; + background-position: -848px -1346px; width: 105px; height: 105px; } .Mount_Body_Unicorn-CottonCandyBlue { background-image: url(spritesmith-main-8.png); - background-position: 0px -1346px; + background-position: -954px -1346px; width: 105px; height: 105px; } .Mount_Body_Unicorn-CottonCandyPink { background-image: url(spritesmith-main-8.png); - background-position: -106px -1346px; + background-position: -1060px -1346px; width: 105px; height: 105px; } .Mount_Body_Unicorn-Desert { background-image: url(spritesmith-main-8.png); - background-position: -212px -1346px; + background-position: -1166px -1346px; width: 105px; height: 105px; } .Mount_Body_Unicorn-Golden { background-image: url(spritesmith-main-8.png); - background-position: -318px -1346px; + background-position: -1272px -1346px; width: 105px; height: 105px; } .Mount_Body_Unicorn-Red { background-image: url(spritesmith-main-8.png); - background-position: -424px -1346px; + background-position: -1452px 0px; width: 105px; height: 105px; } .Mount_Body_Unicorn-Shade { background-image: url(spritesmith-main-8.png); - background-position: -530px -1346px; + background-position: -1452px -106px; width: 105px; height: 105px; } .Mount_Body_Unicorn-Skeleton { background-image: url(spritesmith-main-8.png); - background-position: -636px -1346px; + background-position: -1452px -212px; width: 105px; height: 105px; } .Mount_Body_Unicorn-White { background-image: url(spritesmith-main-8.png); - background-position: -742px -1346px; + background-position: -1452px -318px; width: 105px; height: 105px; } .Mount_Body_Unicorn-Zombie { background-image: url(spritesmith-main-8.png); - background-position: -848px -1346px; + background-position: -1452px -424px; width: 105px; height: 105px; } .Mount_Body_Whale-Base { background-image: url(spritesmith-main-8.png); - background-position: -954px -1346px; + background-position: -1452px -530px; width: 105px; height: 105px; } .Mount_Body_Whale-CottonCandyBlue { background-image: url(spritesmith-main-8.png); - background-position: -1060px -1346px; + background-position: -1452px -636px; width: 105px; height: 105px; } .Mount_Body_Whale-CottonCandyPink { background-image: url(spritesmith-main-8.png); - background-position: -1166px -1346px; + background-position: -1452px -742px; width: 105px; height: 105px; } .Mount_Body_Whale-Desert { background-image: url(spritesmith-main-8.png); - background-position: -1272px -1346px; + background-position: -1452px -848px; width: 105px; height: 105px; } .Mount_Body_Whale-Golden { background-image: url(spritesmith-main-8.png); - background-position: -1452px 0px; + background-position: -1452px -954px; width: 105px; height: 105px; } .Mount_Body_Whale-Red { background-image: url(spritesmith-main-8.png); - background-position: -1452px -106px; + background-position: -1452px -1060px; width: 105px; height: 105px; } .Mount_Body_Whale-Shade { background-image: url(spritesmith-main-8.png); - background-position: -1452px -212px; + background-position: -1452px -1166px; width: 105px; height: 105px; } .Mount_Body_Whale-Skeleton { background-image: url(spritesmith-main-8.png); - background-position: -1452px -318px; + background-position: -1452px -1272px; width: 105px; height: 105px; } .Mount_Body_Whale-White { background-image: url(spritesmith-main-8.png); - background-position: -1452px -424px; + background-position: 0px -1452px; width: 105px; height: 105px; } .Mount_Body_Whale-Zombie { background-image: url(spritesmith-main-8.png); - background-position: -1452px -530px; + background-position: -106px -1452px; width: 105px; height: 105px; } @@ -1050,311 +1104,257 @@ } .Mount_Head_Axolotl-Base { background-image: url(spritesmith-main-8.png); - background-position: -636px -1452px; + background-position: -1558px -106px; width: 105px; height: 105px; } .Mount_Head_Axolotl-CottonCandyBlue { background-image: url(spritesmith-main-8.png); - background-position: -742px -1452px; + background-position: -1558px -212px; width: 105px; height: 105px; } .Mount_Head_Axolotl-CottonCandyPink { background-image: url(spritesmith-main-8.png); - background-position: -848px -1452px; + background-position: -1558px -318px; width: 105px; height: 105px; } .Mount_Head_Axolotl-Desert { background-image: url(spritesmith-main-8.png); - background-position: -954px -1452px; + background-position: -1558px -424px; width: 105px; height: 105px; } .Mount_Head_Axolotl-Golden { background-image: url(spritesmith-main-8.png); - background-position: -1060px -1452px; + background-position: -1558px -530px; width: 105px; height: 105px; } .Mount_Head_Axolotl-Red { background-image: url(spritesmith-main-8.png); - background-position: -1166px -1452px; + background-position: -1558px -636px; width: 105px; height: 105px; } .Mount_Head_Axolotl-Shade { background-image: url(spritesmith-main-8.png); - background-position: -1272px -1452px; + background-position: -1558px -742px; width: 105px; height: 105px; } .Mount_Head_Axolotl-Skeleton { background-image: url(spritesmith-main-8.png); - background-position: -1378px -1452px; + background-position: -1558px -848px; width: 105px; height: 105px; } .Mount_Head_Axolotl-White { background-image: url(spritesmith-main-8.png); - background-position: -1558px 0px; + background-position: -1558px -954px; width: 105px; height: 105px; } .Mount_Head_Axolotl-Zombie { background-image: url(spritesmith-main-8.png); - background-position: -1558px -106px; + background-position: -1558px -1060px; width: 105px; height: 105px; } .Mount_Head_BearCub-Base { background-image: url(spritesmith-main-8.png); - background-position: -1558px -212px; + background-position: -1558px -1166px; width: 105px; height: 105px; } .Mount_Head_BearCub-CottonCandyBlue { background-image: url(spritesmith-main-8.png); - background-position: -1558px -318px; + background-position: -1558px -1272px; width: 105px; height: 105px; } .Mount_Head_BearCub-CottonCandyPink { background-image: url(spritesmith-main-8.png); - background-position: -1558px -424px; + background-position: -1558px -1378px; width: 105px; height: 105px; } .Mount_Head_BearCub-Desert { background-image: url(spritesmith-main-8.png); - background-position: -1558px -530px; + background-position: 0px -1558px; width: 105px; height: 105px; } .Mount_Head_BearCub-Floral { background-image: url(spritesmith-main-8.png); - background-position: -1558px -636px; + background-position: -106px -1558px; width: 105px; height: 105px; } .Mount_Head_BearCub-Golden { background-image: url(spritesmith-main-8.png); - background-position: -1558px -742px; + background-position: -212px -1558px; width: 105px; height: 105px; } .Mount_Head_BearCub-Peppermint { background-image: url(spritesmith-main-8.png); - background-position: -1558px -848px; + background-position: -318px -1558px; width: 105px; height: 105px; } .Mount_Head_BearCub-Polar { background-image: url(spritesmith-main-8.png); - background-position: -1558px -954px; + background-position: -424px -1558px; width: 105px; height: 105px; } .Mount_Head_BearCub-Red { background-image: url(spritesmith-main-8.png); - background-position: -1558px -1060px; + background-position: -530px -1558px; width: 105px; height: 105px; } .Mount_Head_BearCub-Shade { background-image: url(spritesmith-main-8.png); - background-position: -1558px -1166px; + background-position: -636px -1558px; width: 105px; height: 105px; } .Mount_Head_BearCub-Skeleton { background-image: url(spritesmith-main-8.png); - background-position: -1558px -1272px; + background-position: -742px -1558px; width: 105px; height: 105px; } .Mount_Head_BearCub-Spooky { background-image: url(spritesmith-main-8.png); - background-position: -1558px -1378px; + background-position: -848px -1558px; width: 105px; height: 105px; } .Mount_Head_BearCub-White { background-image: url(spritesmith-main-8.png); - background-position: 0px -1558px; + background-position: -954px -1558px; width: 105px; height: 105px; } .Mount_Head_BearCub-Zombie { background-image: url(spritesmith-main-8.png); - background-position: -106px -1558px; + background-position: -1060px -1558px; width: 105px; height: 105px; } .Mount_Head_Bunny-Base { background-image: url(spritesmith-main-8.png); - background-position: -212px -1558px; + background-position: -1166px -1558px; width: 105px; height: 105px; } .Mount_Head_Bunny-CottonCandyBlue { background-image: url(spritesmith-main-8.png); - background-position: -318px -1558px; + background-position: -1272px -1558px; width: 105px; height: 105px; } .Mount_Head_Bunny-CottonCandyPink { background-image: url(spritesmith-main-8.png); - background-position: -424px -1558px; + background-position: -1378px -1558px; width: 105px; height: 105px; } .Mount_Head_Bunny-Desert { background-image: url(spritesmith-main-8.png); - background-position: -530px -1558px; + background-position: -1484px -1558px; width: 105px; height: 105px; } .Mount_Head_Bunny-Golden { background-image: url(spritesmith-main-8.png); - background-position: -636px -1558px; + background-position: -1664px 0px; width: 105px; height: 105px; } .Mount_Head_Bunny-Red { background-image: url(spritesmith-main-8.png); - background-position: -742px -1558px; + background-position: -1664px -106px; width: 105px; height: 105px; } .Mount_Head_Bunny-Shade { background-image: url(spritesmith-main-8.png); - background-position: -848px -1558px; + background-position: -1664px -212px; width: 105px; height: 105px; } .Mount_Head_Bunny-Skeleton { background-image: url(spritesmith-main-8.png); - background-position: -954px -1558px; + background-position: -1664px -318px; width: 105px; height: 105px; } .Mount_Head_Bunny-White { background-image: url(spritesmith-main-8.png); - background-position: -1060px -1558px; + background-position: -1664px -424px; width: 105px; height: 105px; } .Mount_Head_Bunny-Zombie { background-image: url(spritesmith-main-8.png); - background-position: -1166px -1558px; + background-position: -1664px -530px; width: 105px; height: 105px; } .Mount_Head_Cactus-Base { background-image: url(spritesmith-main-8.png); - background-position: -1272px -1558px; + background-position: -1664px -636px; width: 105px; height: 105px; } .Mount_Head_Cactus-CottonCandyBlue { background-image: url(spritesmith-main-8.png); - background-position: -1378px -1558px; + background-position: -1664px -742px; width: 105px; height: 105px; } .Mount_Head_Cactus-CottonCandyPink { background-image: url(spritesmith-main-8.png); - background-position: -1484px -1558px; + background-position: -1664px -848px; width: 105px; height: 105px; } .Mount_Head_Cactus-Desert { background-image: url(spritesmith-main-8.png); - background-position: -1664px 0px; + background-position: -1664px -954px; width: 105px; height: 105px; } .Mount_Head_Cactus-Floral { background-image: url(spritesmith-main-8.png); - background-position: -1664px -106px; + background-position: -1664px -1060px; width: 105px; height: 105px; } .Mount_Head_Cactus-Golden { background-image: url(spritesmith-main-8.png); - background-position: -1664px -212px; + background-position: -1664px -1166px; width: 105px; height: 105px; } .Mount_Head_Cactus-Peppermint { background-image: url(spritesmith-main-8.png); - background-position: -1664px -318px; + background-position: -1664px -1272px; width: 105px; height: 105px; } .Mount_Head_Cactus-Red { background-image: url(spritesmith-main-8.png); - background-position: -1664px -424px; + background-position: -1664px -1378px; width: 105px; height: 105px; } .Mount_Head_Cactus-Shade { - background-image: url(spritesmith-main-8.png); - background-position: -1664px -530px; - width: 105px; - height: 105px; -} -.Mount_Head_Cactus-Skeleton { - background-image: url(spritesmith-main-8.png); - background-position: -1664px -636px; - width: 105px; - height: 105px; -} -.Mount_Head_Cactus-Spooky { - background-image: url(spritesmith-main-8.png); - background-position: -1664px -742px; - width: 105px; - height: 105px; -} -.Mount_Head_Cactus-White { - background-image: url(spritesmith-main-8.png); - background-position: -1664px -848px; - width: 105px; - height: 105px; -} -.Mount_Head_Cactus-Zombie { - background-image: url(spritesmith-main-8.png); - background-position: -1664px -954px; - width: 105px; - height: 105px; -} -.Mount_Head_Cheetah-Base { - background-image: url(spritesmith-main-8.png); - background-position: -1664px -1060px; - width: 105px; - height: 105px; -} -.Mount_Head_Cheetah-CottonCandyBlue { - background-image: url(spritesmith-main-8.png); - background-position: -1664px -1166px; - width: 105px; - height: 105px; -} -.Mount_Head_Cheetah-CottonCandyPink { - background-image: url(spritesmith-main-8.png); - background-position: -1664px -1272px; - width: 105px; - height: 105px; -} -.Mount_Head_Cheetah-Desert { - background-image: url(spritesmith-main-8.png); - background-position: -1664px -1378px; - width: 105px; - height: 105px; -} -.Mount_Head_Cheetah-Golden { background-image: url(spritesmith-main-8.png); background-position: -1664px -1484px; width: 105px; diff --git a/common/dist/sprites/spritesmith-main-8.png b/common/dist/sprites/spritesmith-main-8.png index 1e26e7b067..fd99bae754 100644 Binary files a/common/dist/sprites/spritesmith-main-8.png and b/common/dist/sprites/spritesmith-main-8.png differ diff --git a/common/dist/sprites/spritesmith-main-9.css b/common/dist/sprites/spritesmith-main-9.css index 84e06b904b..0220bc7988 100644 --- a/common/dist/sprites/spritesmith-main-9.css +++ b/common/dist/sprites/spritesmith-main-9.css @@ -1,1452 +1,1470 @@ +.Mount_Head_Cactus-Skeleton { + background-image: url(spritesmith-main-9.png); + background-position: -1060px -742px; + width: 105px; + height: 105px; +} +.Mount_Head_Cactus-Spooky { + background-image: url(spritesmith-main-9.png); + background-position: -318px -1105px; + width: 105px; + height: 105px; +} +.Mount_Head_Cactus-White { + background-image: url(spritesmith-main-9.png); + background-position: -1060px -848px; + width: 105px; + height: 105px; +} +.Mount_Head_Cactus-Zombie { + background-image: url(spritesmith-main-9.png); + background-position: 0px -999px; + width: 105px; + height: 105px; +} +.Mount_Head_Cheetah-Base { + background-image: url(spritesmith-main-9.png); + background-position: -106px -999px; + width: 105px; + height: 105px; +} +.Mount_Head_Cheetah-CottonCandyBlue { + background-image: url(spritesmith-main-9.png); + background-position: -212px -999px; + width: 105px; + height: 105px; +} +.Mount_Head_Cheetah-CottonCandyPink { + background-image: url(spritesmith-main-9.png); + background-position: -318px -999px; + width: 105px; + height: 105px; +} +.Mount_Head_Cheetah-Desert { + background-image: url(spritesmith-main-9.png); + background-position: -424px -999px; + width: 105px; + height: 105px; +} +.Mount_Head_Cheetah-Golden { + background-image: url(spritesmith-main-9.png); + background-position: -318px -1211px; + width: 105px; + height: 105px; +} .Mount_Head_Cheetah-Red { background-image: url(spritesmith-main-9.png); - background-position: -636px -935px; + background-position: -742px -1211px; width: 105px; height: 105px; } .Mount_Head_Cheetah-Shade { background-image: url(spritesmith-main-9.png); - background-position: -106px -1147px; + background-position: -848px -1211px; width: 105px; height: 105px; } .Mount_Head_Cheetah-Skeleton { background-image: url(spritesmith-main-9.png); - background-position: -742px -935px; + background-position: -1060px -424px; width: 105px; height: 105px; } .Mount_Head_Cheetah-White { background-image: url(spritesmith-main-9.png); - background-position: -424px -935px; + background-position: -1060px -530px; width: 105px; height: 105px; } .Mount_Head_Cheetah-Zombie { background-image: url(spritesmith-main-9.png); - background-position: -530px -935px; + background-position: -1060px -636px; width: 105px; height: 105px; } .Mount_Head_Cuttlefish-Base { background-image: url(spritesmith-main-9.png); - background-position: -484px -230px; + background-position: -530px -115px; width: 105px; height: 114px; } .Mount_Head_Cuttlefish-CottonCandyBlue { background-image: url(spritesmith-main-9.png); - background-position: -590px -230px; + background-position: -318px -239px; width: 105px; height: 114px; } .Mount_Head_Cuttlefish-CottonCandyPink { background-image: url(spritesmith-main-9.png); - background-position: -590px -115px; + background-position: -212px 0px; width: 105px; height: 114px; } .Mount_Head_Cuttlefish-Desert { background-image: url(spritesmith-main-9.png); - background-position: 0px -502px; + background-position: 0px -124px; width: 105px; height: 114px; } .Mount_Head_Cuttlefish-Golden { background-image: url(spritesmith-main-9.png); - background-position: -106px -387px; + background-position: -106px -124px; width: 105px; height: 114px; } .Mount_Head_Cuttlefish-Red { background-image: url(spritesmith-main-9.png); - background-position: -378px 0px; + background-position: -212px -124px; width: 105px; height: 114px; } .Mount_Head_Cuttlefish-Shade { background-image: url(spritesmith-main-9.png); - background-position: -378px -115px; + background-position: -318px 0px; width: 105px; height: 114px; } .Mount_Head_Cuttlefish-Skeleton { background-image: url(spritesmith-main-9.png); - background-position: 0px -272px; + background-position: -318px -115px; width: 105px; height: 114px; } .Mount_Head_Cuttlefish-White { background-image: url(spritesmith-main-9.png); - background-position: -106px -272px; + background-position: 0px -239px; width: 105px; height: 114px; } .Mount_Head_Cuttlefish-Zombie { background-image: url(spritesmith-main-9.png); - background-position: -212px -272px; + background-position: -106px -239px; width: 105px; height: 114px; } .Mount_Head_Deer-Base { background-image: url(spritesmith-main-9.png); - background-position: -848px -935px; + background-position: -954px -1211px; width: 105px; height: 105px; } .Mount_Head_Deer-CottonCandyBlue { background-image: url(spritesmith-main-9.png); - background-position: -954px -935px; + background-position: -109px -469px; width: 105px; height: 105px; } .Mount_Head_Deer-CottonCandyPink { background-image: url(spritesmith-main-9.png); - background-position: -1120px 0px; + background-position: -215px -469px; width: 105px; height: 105px; } .Mount_Head_Deer-Desert { background-image: url(spritesmith-main-9.png); - background-position: -1120px -106px; + background-position: -321px -469px; width: 105px; height: 105px; } .Mount_Head_Deer-Golden { background-image: url(spritesmith-main-9.png); - background-position: -1120px -212px; + background-position: -427px -469px; width: 105px; height: 105px; } .Mount_Head_Deer-Red { background-image: url(spritesmith-main-9.png); - background-position: -1120px -318px; + background-position: -636px 0px; width: 105px; height: 105px; } .Mount_Head_Deer-Shade { background-image: url(spritesmith-main-9.png); - background-position: -530px -1147px; + background-position: -636px -106px; width: 105px; height: 105px; } .Mount_Head_Deer-Skeleton { background-image: url(spritesmith-main-9.png); - background-position: -1332px -424px; + background-position: -636px -212px; width: 105px; height: 105px; } .Mount_Head_Deer-White { background-image: url(spritesmith-main-9.png); - background-position: -1332px -848px; + background-position: -636px -318px; width: 105px; height: 105px; } .Mount_Head_Deer-Zombie { background-image: url(spritesmith-main-9.png); - background-position: -1332px -954px; + background-position: -636px -424px; width: 105px; height: 105px; } .Mount_Head_Dragon-Base { background-image: url(spritesmith-main-9.png); - background-position: -1332px -1060px; + background-position: 0px -575px; width: 105px; height: 105px; } .Mount_Head_Dragon-CottonCandyBlue { background-image: url(spritesmith-main-9.png); - background-position: -1484px -1571px; + background-position: -106px -575px; width: 105px; height: 105px; } .Mount_Head_Dragon-CottonCandyPink { background-image: url(spritesmith-main-9.png); - background-position: -1590px -1571px; + background-position: -212px -575px; width: 105px; height: 105px; } .Mount_Head_Dragon-Desert { background-image: url(spritesmith-main-9.png); - background-position: -427px -502px; + background-position: -318px -575px; width: 105px; height: 105px; } .Mount_Head_Dragon-Floral { background-image: url(spritesmith-main-9.png); - background-position: -533px -502px; + background-position: -424px -575px; width: 105px; height: 105px; } .Mount_Head_Dragon-Golden { background-image: url(spritesmith-main-9.png); - background-position: -696px 0px; + background-position: -530px -575px; width: 105px; height: 105px; } .Mount_Head_Dragon-Peppermint { background-image: url(spritesmith-main-9.png); - background-position: -696px -106px; + background-position: -636px -575px; width: 105px; height: 105px; } .Mount_Head_Dragon-Red { background-image: url(spritesmith-main-9.png); - background-position: -696px -212px; + background-position: -742px 0px; width: 105px; height: 105px; } .Mount_Head_Dragon-Shade { background-image: url(spritesmith-main-9.png); - background-position: -696px -318px; + background-position: -742px -106px; width: 105px; height: 105px; } .Mount_Head_Dragon-Skeleton { background-image: url(spritesmith-main-9.png); - background-position: -696px -424px; + background-position: -742px -212px; width: 105px; height: 105px; } .Mount_Head_Dragon-Spooky { background-image: url(spritesmith-main-9.png); - background-position: 0px -617px; + background-position: -742px -318px; width: 105px; height: 105px; } .Mount_Head_Dragon-White { background-image: url(spritesmith-main-9.png); - background-position: -106px -617px; + background-position: -742px -424px; width: 105px; height: 105px; } .Mount_Head_Dragon-Zombie { background-image: url(spritesmith-main-9.png); - background-position: -212px -617px; + background-position: -742px -530px; width: 105px; height: 105px; } .Mount_Head_Egg-Base { background-image: url(spritesmith-main-9.png); - background-position: -318px -617px; + background-position: 0px -681px; width: 105px; height: 105px; } .Mount_Head_Egg-CottonCandyBlue { background-image: url(spritesmith-main-9.png); - background-position: -424px -617px; + background-position: -106px -681px; width: 105px; height: 105px; } .Mount_Head_Egg-CottonCandyPink { background-image: url(spritesmith-main-9.png); - background-position: -530px -617px; + background-position: -212px -681px; width: 105px; height: 105px; } .Mount_Head_Egg-Desert { background-image: url(spritesmith-main-9.png); - background-position: -636px -617px; + background-position: -318px -681px; width: 105px; height: 105px; } .Mount_Head_Egg-Golden { background-image: url(spritesmith-main-9.png); - background-position: -802px 0px; + background-position: -424px -681px; width: 105px; height: 105px; } .Mount_Head_Egg-Red { background-image: url(spritesmith-main-9.png); - background-position: -802px -106px; + background-position: -530px -681px; width: 105px; height: 105px; } .Mount_Head_Egg-Shade { background-image: url(spritesmith-main-9.png); - background-position: -802px -212px; + background-position: -636px -681px; width: 105px; height: 105px; } .Mount_Head_Egg-Skeleton { background-image: url(spritesmith-main-9.png); - background-position: -802px -318px; + background-position: -742px -681px; width: 105px; height: 105px; } .Mount_Head_Egg-White { background-image: url(spritesmith-main-9.png); - background-position: -802px -424px; + background-position: -848px 0px; width: 105px; height: 105px; } .Mount_Head_Egg-Zombie { background-image: url(spritesmith-main-9.png); - background-position: -802px -530px; + background-position: -848px -106px; width: 105px; height: 105px; } .Mount_Head_Falcon-Base { background-image: url(spritesmith-main-9.png); - background-position: 0px -723px; + background-position: -848px -212px; width: 105px; height: 105px; } .Mount_Head_Falcon-CottonCandyBlue { background-image: url(spritesmith-main-9.png); - background-position: -106px -723px; + background-position: -848px -318px; width: 105px; height: 105px; } .Mount_Head_Falcon-CottonCandyPink { background-image: url(spritesmith-main-9.png); - background-position: -212px -723px; + background-position: -848px -424px; width: 105px; height: 105px; } .Mount_Head_Falcon-Desert { background-image: url(spritesmith-main-9.png); - background-position: -318px -723px; + background-position: -848px -530px; width: 105px; height: 105px; } .Mount_Head_Falcon-Golden { background-image: url(spritesmith-main-9.png); - background-position: -424px -723px; + background-position: -848px -636px; width: 105px; height: 105px; } .Mount_Head_Falcon-Red { background-image: url(spritesmith-main-9.png); - background-position: -530px -723px; + background-position: 0px -787px; width: 105px; height: 105px; } .Mount_Head_Falcon-Shade { background-image: url(spritesmith-main-9.png); - background-position: -636px -723px; + background-position: -106px -787px; width: 105px; height: 105px; } .Mount_Head_Falcon-Skeleton { background-image: url(spritesmith-main-9.png); - background-position: -742px -723px; + background-position: -212px -787px; width: 105px; height: 105px; } .Mount_Head_Falcon-White { background-image: url(spritesmith-main-9.png); - background-position: -908px 0px; + background-position: -318px -787px; width: 105px; height: 105px; } .Mount_Head_Falcon-Zombie { background-image: url(spritesmith-main-9.png); - background-position: -908px -106px; + background-position: -424px -787px; width: 105px; height: 105px; } .Mount_Head_FlyingPig-Base { background-image: url(spritesmith-main-9.png); - background-position: -908px -212px; + background-position: -530px -787px; width: 105px; height: 105px; } .Mount_Head_FlyingPig-CottonCandyBlue { background-image: url(spritesmith-main-9.png); - background-position: -908px -318px; + background-position: -636px -787px; width: 105px; height: 105px; } .Mount_Head_FlyingPig-CottonCandyPink { background-image: url(spritesmith-main-9.png); - background-position: -908px -424px; + background-position: -742px -787px; width: 105px; height: 105px; } .Mount_Head_FlyingPig-Desert { background-image: url(spritesmith-main-9.png); - background-position: -908px -530px; + background-position: -848px -787px; width: 105px; height: 105px; } .Mount_Head_FlyingPig-Floral { background-image: url(spritesmith-main-9.png); - background-position: -908px -636px; + background-position: -954px 0px; width: 105px; height: 105px; } .Mount_Head_FlyingPig-Golden { background-image: url(spritesmith-main-9.png); - background-position: 0px -829px; + background-position: -954px -106px; width: 105px; height: 105px; } .Mount_Head_FlyingPig-Peppermint { background-image: url(spritesmith-main-9.png); - background-position: -106px -829px; + background-position: -954px -212px; width: 105px; height: 105px; } .Mount_Head_FlyingPig-Red { background-image: url(spritesmith-main-9.png); - background-position: -212px -829px; + background-position: -954px -318px; width: 105px; height: 105px; } .Mount_Head_FlyingPig-Shade { background-image: url(spritesmith-main-9.png); - background-position: -318px -829px; + background-position: -954px -424px; width: 105px; height: 105px; } .Mount_Head_FlyingPig-Skeleton { background-image: url(spritesmith-main-9.png); - background-position: -424px -829px; + background-position: -954px -530px; width: 105px; height: 105px; } .Mount_Head_FlyingPig-Spooky { background-image: url(spritesmith-main-9.png); - background-position: -530px -829px; + background-position: -954px -636px; width: 105px; height: 105px; } .Mount_Head_FlyingPig-White { background-image: url(spritesmith-main-9.png); - background-position: -636px -829px; + background-position: -954px -742px; width: 105px; height: 105px; } .Mount_Head_FlyingPig-Zombie { background-image: url(spritesmith-main-9.png); - background-position: -742px -829px; + background-position: 0px -893px; width: 105px; height: 105px; } .Mount_Head_Fox-Base { background-image: url(spritesmith-main-9.png); - background-position: -848px -829px; + background-position: -106px -893px; width: 105px; height: 105px; } .Mount_Head_Fox-CottonCandyBlue { background-image: url(spritesmith-main-9.png); - background-position: -1014px 0px; + background-position: -212px -893px; width: 105px; height: 105px; } .Mount_Head_Fox-CottonCandyPink { background-image: url(spritesmith-main-9.png); - background-position: -1014px -106px; + background-position: -318px -893px; width: 105px; height: 105px; } .Mount_Head_Fox-Desert { background-image: url(spritesmith-main-9.png); - background-position: -1014px -212px; + background-position: -424px -893px; width: 105px; height: 105px; } .Mount_Head_Fox-Floral { background-image: url(spritesmith-main-9.png); - background-position: -1014px -318px; + background-position: -530px -893px; width: 105px; height: 105px; } .Mount_Head_Fox-Golden { background-image: url(spritesmith-main-9.png); - background-position: -1014px -424px; + background-position: -636px -893px; width: 105px; height: 105px; } .Mount_Head_Fox-Peppermint { background-image: url(spritesmith-main-9.png); - background-position: -1014px -530px; + background-position: -742px -893px; width: 105px; height: 105px; } .Mount_Head_Fox-Red { background-image: url(spritesmith-main-9.png); - background-position: -1014px -636px; + background-position: -848px -893px; width: 105px; height: 105px; } .Mount_Head_Fox-Shade { background-image: url(spritesmith-main-9.png); - background-position: -1014px -742px; + background-position: -954px -893px; width: 105px; height: 105px; } .Mount_Head_Fox-Skeleton { background-image: url(spritesmith-main-9.png); - background-position: 0px -935px; + background-position: -1060px 0px; width: 105px; height: 105px; } .Mount_Head_Fox-Spooky { background-image: url(spritesmith-main-9.png); - background-position: -106px -935px; + background-position: -1060px -106px; width: 105px; height: 105px; } .Mount_Head_Fox-White { background-image: url(spritesmith-main-9.png); - background-position: -212px -935px; + background-position: -1060px -212px; width: 105px; height: 105px; } .Mount_Head_Fox-Zombie { background-image: url(spritesmith-main-9.png); - background-position: -318px -935px; + background-position: -1060px -318px; width: 105px; height: 105px; } .Mount_Head_Frog-Base { background-image: url(spritesmith-main-9.png); - background-position: -318px -272px; + background-position: -212px -239px; width: 105px; height: 114px; } .Mount_Head_Frog-CottonCandyBlue { background-image: url(spritesmith-main-9.png); - background-position: -484px 0px; + background-position: -106px 0px; width: 105px; height: 114px; } .Mount_Head_Frog-CottonCandyPink { background-image: url(spritesmith-main-9.png); - background-position: -484px -115px; + background-position: -424px 0px; width: 105px; height: 114px; } .Mount_Head_Frog-Desert { background-image: url(spritesmith-main-9.png); - background-position: -106px -502px; + background-position: -424px -115px; width: 105px; height: 114px; } .Mount_Head_Frog-Golden { background-image: url(spritesmith-main-9.png); - background-position: 0px -387px; + background-position: -424px -230px; width: 105px; height: 114px; } .Mount_Head_Frog-Red { background-image: url(spritesmith-main-9.png); - background-position: -272px -124px; + background-position: 0px -354px; width: 105px; height: 114px; } .Mount_Head_Frog-Shade { background-image: url(spritesmith-main-9.png); - background-position: -212px -387px; + background-position: -106px -354px; width: 105px; height: 114px; } .Mount_Head_Frog-Skeleton { background-image: url(spritesmith-main-9.png); - background-position: -318px -387px; + background-position: -212px -354px; width: 105px; height: 114px; } .Mount_Head_Frog-White { background-image: url(spritesmith-main-9.png); - background-position: -424px -387px; + background-position: -318px -354px; width: 105px; height: 114px; } .Mount_Head_Frog-Zombie { background-image: url(spritesmith-main-9.png); - background-position: -590px 0px; + background-position: -424px -354px; width: 105px; height: 114px; } .Mount_Head_Gryphon-Base { background-image: url(spritesmith-main-9.png); - background-position: -1120px -424px; + background-position: -530px -999px; width: 105px; height: 105px; } .Mount_Head_Gryphon-CottonCandyBlue { background-image: url(spritesmith-main-9.png); - background-position: -1120px -530px; + background-position: -636px -999px; width: 105px; height: 105px; } .Mount_Head_Gryphon-CottonCandyPink { background-image: url(spritesmith-main-9.png); - background-position: -1120px -636px; + background-position: -742px -999px; width: 105px; height: 105px; } .Mount_Head_Gryphon-Desert { background-image: url(spritesmith-main-9.png); - background-position: -1120px -742px; + background-position: -848px -999px; width: 105px; height: 105px; } .Mount_Head_Gryphon-Golden { background-image: url(spritesmith-main-9.png); - background-position: -1120px -848px; + background-position: -954px -999px; width: 105px; height: 105px; } .Mount_Head_Gryphon-Red { background-image: url(spritesmith-main-9.png); - background-position: 0px -1041px; + background-position: -1060px -999px; width: 105px; height: 105px; } .Mount_Head_Gryphon-RoyalPurple { background-image: url(spritesmith-main-9.png); - background-position: -106px -1041px; + background-position: -1166px 0px; width: 105px; height: 105px; } .Mount_Head_Gryphon-Shade { background-image: url(spritesmith-main-9.png); - background-position: -212px -1041px; + background-position: -1166px -106px; width: 105px; height: 105px; } .Mount_Head_Gryphon-Skeleton { background-image: url(spritesmith-main-9.png); - background-position: -318px -1041px; + background-position: -1166px -212px; width: 105px; height: 105px; } .Mount_Head_Gryphon-White { background-image: url(spritesmith-main-9.png); - background-position: -424px -1041px; + background-position: -1166px -318px; width: 105px; height: 105px; } .Mount_Head_Gryphon-Zombie { background-image: url(spritesmith-main-9.png); - background-position: -530px -1041px; + background-position: -1166px -424px; width: 105px; height: 105px; } .Mount_Head_Hedgehog-Base { background-image: url(spritesmith-main-9.png); - background-position: -636px -1041px; + background-position: -1166px -530px; width: 105px; height: 105px; } .Mount_Head_Hedgehog-CottonCandyBlue { background-image: url(spritesmith-main-9.png); - background-position: -742px -1041px; + background-position: -1166px -636px; width: 105px; height: 105px; } .Mount_Head_Hedgehog-CottonCandyPink { background-image: url(spritesmith-main-9.png); - background-position: -848px -1041px; + background-position: -1166px -742px; width: 105px; height: 105px; } .Mount_Head_Hedgehog-Desert { background-image: url(spritesmith-main-9.png); - background-position: -954px -1041px; + background-position: -1166px -848px; width: 105px; height: 105px; } .Mount_Head_Hedgehog-Golden { background-image: url(spritesmith-main-9.png); - background-position: -1060px -1041px; + background-position: -1166px -954px; width: 105px; height: 105px; } .Mount_Head_Hedgehog-Red { background-image: url(spritesmith-main-9.png); - background-position: -1226px 0px; + background-position: 0px -1105px; width: 105px; height: 105px; } .Mount_Head_Hedgehog-Shade { background-image: url(spritesmith-main-9.png); - background-position: -1226px -106px; + background-position: -106px -1105px; width: 105px; height: 105px; } .Mount_Head_Hedgehog-Skeleton { background-image: url(spritesmith-main-9.png); - background-position: -1226px -212px; + background-position: -212px -1105px; width: 105px; height: 105px; } .Mount_Head_Hedgehog-White { background-image: url(spritesmith-main-9.png); - background-position: -1226px -318px; + background-position: -530px -341px; width: 105px; height: 105px; } .Mount_Head_Hedgehog-Zombie { background-image: url(spritesmith-main-9.png); - background-position: -1226px -424px; + background-position: -424px -1105px; width: 105px; height: 105px; } .Mount_Head_Horse-Base { background-image: url(spritesmith-main-9.png); - background-position: -1226px -530px; + background-position: -530px -1105px; width: 105px; height: 105px; } .Mount_Head_Horse-CottonCandyBlue { background-image: url(spritesmith-main-9.png); - background-position: -1226px -636px; + background-position: -636px -1105px; width: 105px; height: 105px; } .Mount_Head_Horse-CottonCandyPink { background-image: url(spritesmith-main-9.png); - background-position: -1226px -742px; + background-position: -742px -1105px; width: 105px; height: 105px; } .Mount_Head_Horse-Desert { background-image: url(spritesmith-main-9.png); - background-position: -1226px -848px; + background-position: -848px -1105px; width: 105px; height: 105px; } .Mount_Head_Horse-Golden { background-image: url(spritesmith-main-9.png); - background-position: -1226px -954px; + background-position: -954px -1105px; width: 105px; height: 105px; } .Mount_Head_Horse-Red { background-image: url(spritesmith-main-9.png); - background-position: 0px -1147px; + background-position: -1060px -1105px; width: 105px; height: 105px; } .Mount_Head_Horse-Shade { background-image: url(spritesmith-main-9.png); - background-position: -1756px 0px; + background-position: -1166px -1105px; width: 105px; height: 105px; } .Mount_Head_Horse-Skeleton { background-image: url(spritesmith-main-9.png); - background-position: -212px -1147px; + background-position: -1272px 0px; width: 105px; height: 105px; } .Mount_Head_Horse-White { background-image: url(spritesmith-main-9.png); - background-position: -318px -1147px; + background-position: -1272px -106px; width: 105px; height: 105px; } .Mount_Head_Horse-Zombie { background-image: url(spritesmith-main-9.png); - background-position: -424px -1147px; + background-position: -1272px -212px; width: 105px; height: 105px; } .Mount_Head_JackOLantern-Base { background-image: url(spritesmith-main-9.png); - background-position: -1756px -106px; + background-position: -1696px -530px; width: 90px; height: 105px; } .Mount_Head_LionCub-Base { background-image: url(spritesmith-main-9.png); - background-position: -636px -1147px; + background-position: -1272px -424px; width: 105px; height: 105px; } .Mount_Head_LionCub-CottonCandyBlue { background-image: url(spritesmith-main-9.png); - background-position: -742px -1147px; + background-position: -1272px -530px; width: 105px; height: 105px; } .Mount_Head_LionCub-CottonCandyPink { background-image: url(spritesmith-main-9.png); - background-position: -848px -1147px; + background-position: -1272px -636px; width: 105px; height: 105px; } .Mount_Head_LionCub-Desert { background-image: url(spritesmith-main-9.png); - background-position: -954px -1147px; + background-position: -1272px -742px; width: 105px; height: 105px; } .Mount_Head_LionCub-Ethereal { background-image: url(spritesmith-main-9.png); - background-position: -1060px -1147px; + background-position: -1272px -848px; width: 105px; height: 105px; } .Mount_Head_LionCub-Floral { background-image: url(spritesmith-main-9.png); - background-position: -1166px -1147px; + background-position: -1272px -954px; width: 105px; height: 105px; } .Mount_Head_LionCub-Golden { background-image: url(spritesmith-main-9.png); - background-position: -1332px 0px; + background-position: -1272px -1060px; width: 105px; height: 105px; } .Mount_Head_LionCub-Peppermint { background-image: url(spritesmith-main-9.png); - background-position: -1332px -106px; + background-position: 0px -1211px; width: 105px; height: 105px; } .Mount_Head_LionCub-Red { background-image: url(spritesmith-main-9.png); - background-position: -1332px -212px; + background-position: -106px -1211px; width: 105px; height: 105px; } .Mount_Head_LionCub-Shade { background-image: url(spritesmith-main-9.png); - background-position: -1332px -318px; + background-position: -212px -1211px; width: 105px; height: 105px; } .Mount_Head_LionCub-Skeleton { background-image: url(spritesmith-main-9.png); - background-position: -212px -502px; + background-position: -530px -230px; width: 105px; height: 110px; } .Mount_Head_LionCub-Spooky { background-image: url(spritesmith-main-9.png); - background-position: -1332px -530px; + background-position: -424px -1211px; width: 105px; height: 105px; } .Mount_Head_LionCub-White { background-image: url(spritesmith-main-9.png); - background-position: -1332px -636px; + background-position: -530px -1211px; width: 105px; height: 105px; } .Mount_Head_LionCub-Zombie { background-image: url(spritesmith-main-9.png); - background-position: -1332px -742px; + background-position: -636px -1211px; width: 105px; height: 105px; } .Mount_Head_MagicalBee-Base { background-image: url(spritesmith-main-9.png); - background-position: -590px -345px; + background-position: -530px 0px; width: 105px; height: 114px; } .Mount_Head_Mammoth-Base { background-image: url(spritesmith-main-9.png); - background-position: -272px 0px; + background-position: 0px 0px; width: 105px; height: 123px; } .Mount_Head_MantisShrimp-Base { background-image: url(spritesmith-main-9.png); - background-position: -318px -502px; + background-position: 0px -469px; width: 108px; height: 105px; } .Mount_Head_Monkey-Base { background-image: url(spritesmith-main-9.png); - background-position: 0px -1253px; + background-position: -1060px -1211px; width: 105px; height: 105px; } .Mount_Head_Monkey-CottonCandyBlue { background-image: url(spritesmith-main-9.png); - background-position: -106px -1253px; + background-position: -1166px -1211px; width: 105px; height: 105px; } .Mount_Head_Monkey-CottonCandyPink { background-image: url(spritesmith-main-9.png); - background-position: -212px -1253px; + background-position: -1272px -1211px; width: 105px; height: 105px; } .Mount_Head_Monkey-Desert { background-image: url(spritesmith-main-9.png); - background-position: -318px -1253px; + background-position: -1378px 0px; width: 105px; height: 105px; } .Mount_Head_Monkey-Golden { background-image: url(spritesmith-main-9.png); - background-position: -424px -1253px; + background-position: -1378px -106px; width: 105px; height: 105px; } .Mount_Head_Monkey-Red { background-image: url(spritesmith-main-9.png); - background-position: -530px -1253px; + background-position: -1378px -212px; width: 105px; height: 105px; } .Mount_Head_Monkey-Shade { background-image: url(spritesmith-main-9.png); - background-position: -636px -1253px; + background-position: -1378px -318px; width: 105px; height: 105px; } .Mount_Head_Monkey-Skeleton { background-image: url(spritesmith-main-9.png); - background-position: -742px -1253px; + background-position: -1378px -424px; width: 105px; height: 105px; } .Mount_Head_Monkey-White { background-image: url(spritesmith-main-9.png); - background-position: -848px -1253px; + background-position: -1378px -530px; width: 105px; height: 105px; } .Mount_Head_Monkey-Zombie { background-image: url(spritesmith-main-9.png); - background-position: -954px -1253px; + background-position: -1378px -636px; width: 105px; height: 105px; } .Mount_Head_Octopus-Base { background-image: url(spritesmith-main-9.png); - background-position: -1060px -1253px; + background-position: -1378px -742px; width: 105px; height: 105px; } .Mount_Head_Octopus-CottonCandyBlue { background-image: url(spritesmith-main-9.png); - background-position: -1166px -1253px; + background-position: -1378px -848px; width: 105px; height: 105px; } .Mount_Head_Octopus-CottonCandyPink { background-image: url(spritesmith-main-9.png); - background-position: -1272px -1253px; + background-position: -1378px -954px; width: 105px; height: 105px; } .Mount_Head_Octopus-Desert { background-image: url(spritesmith-main-9.png); - background-position: -1438px 0px; + background-position: -1378px -1060px; width: 105px; height: 105px; } .Mount_Head_Octopus-Golden { background-image: url(spritesmith-main-9.png); - background-position: -1438px -106px; + background-position: -1378px -1166px; width: 105px; height: 105px; } .Mount_Head_Octopus-Red { background-image: url(spritesmith-main-9.png); - background-position: -1438px -212px; + background-position: 0px -1317px; width: 105px; height: 105px; } .Mount_Head_Octopus-Shade { background-image: url(spritesmith-main-9.png); - background-position: -1438px -318px; + background-position: -106px -1317px; width: 105px; height: 105px; } .Mount_Head_Octopus-Skeleton { background-image: url(spritesmith-main-9.png); - background-position: -1438px -424px; + background-position: -212px -1317px; width: 105px; height: 105px; } .Mount_Head_Octopus-White { background-image: url(spritesmith-main-9.png); - background-position: -1438px -530px; + background-position: -318px -1317px; width: 105px; height: 105px; } .Mount_Head_Octopus-Zombie { background-image: url(spritesmith-main-9.png); - background-position: -1438px -636px; + background-position: -424px -1317px; width: 105px; height: 105px; } .Mount_Head_Orca-Base { background-image: url(spritesmith-main-9.png); - background-position: -1438px -742px; + background-position: -530px -1317px; width: 105px; height: 105px; } .Mount_Head_Owl-Base { background-image: url(spritesmith-main-9.png); - background-position: -1438px -848px; + background-position: -636px -1317px; width: 105px; height: 105px; } .Mount_Head_Owl-CottonCandyBlue { background-image: url(spritesmith-main-9.png); - background-position: -1438px -954px; + background-position: -742px -1317px; width: 105px; height: 105px; } .Mount_Head_Owl-CottonCandyPink { background-image: url(spritesmith-main-9.png); - background-position: -1438px -1060px; + background-position: -848px -1317px; width: 105px; height: 105px; } .Mount_Head_Owl-Desert { background-image: url(spritesmith-main-9.png); - background-position: -1438px -1166px; + background-position: -954px -1317px; width: 105px; height: 105px; } .Mount_Head_Owl-Golden { background-image: url(spritesmith-main-9.png); - background-position: 0px -1359px; + background-position: -1060px -1317px; width: 105px; height: 105px; } .Mount_Head_Owl-Red { background-image: url(spritesmith-main-9.png); - background-position: -106px -1359px; + background-position: -1166px -1317px; width: 105px; height: 105px; } .Mount_Head_Owl-Shade { background-image: url(spritesmith-main-9.png); - background-position: -212px -1359px; + background-position: -1272px -1317px; width: 105px; height: 105px; } .Mount_Head_Owl-Skeleton { background-image: url(spritesmith-main-9.png); - background-position: -318px -1359px; + background-position: -1378px -1317px; width: 105px; height: 105px; } .Mount_Head_Owl-White { background-image: url(spritesmith-main-9.png); - background-position: -424px -1359px; + background-position: -1484px 0px; width: 105px; height: 105px; } .Mount_Head_Owl-Zombie { background-image: url(spritesmith-main-9.png); - background-position: -530px -1359px; + background-position: -1484px -106px; width: 105px; height: 105px; } .Mount_Head_PandaCub-Base { background-image: url(spritesmith-main-9.png); - background-position: -636px -1359px; + background-position: -1484px -212px; width: 105px; height: 105px; } .Mount_Head_PandaCub-CottonCandyBlue { background-image: url(spritesmith-main-9.png); - background-position: -742px -1359px; + background-position: -1484px -318px; width: 105px; height: 105px; } .Mount_Head_PandaCub-CottonCandyPink { background-image: url(spritesmith-main-9.png); - background-position: -848px -1359px; + background-position: -1484px -424px; width: 105px; height: 105px; } .Mount_Head_PandaCub-Desert { background-image: url(spritesmith-main-9.png); - background-position: -954px -1359px; + background-position: -1484px -530px; width: 105px; height: 105px; } .Mount_Head_PandaCub-Floral { background-image: url(spritesmith-main-9.png); - background-position: -1060px -1359px; + background-position: -1484px -636px; width: 105px; height: 105px; } .Mount_Head_PandaCub-Golden { background-image: url(spritesmith-main-9.png); - background-position: -1166px -1359px; + background-position: -1484px -742px; width: 105px; height: 105px; } .Mount_Head_PandaCub-Peppermint { background-image: url(spritesmith-main-9.png); - background-position: -1272px -1359px; + background-position: -1484px -848px; width: 105px; height: 105px; } .Mount_Head_PandaCub-Red { background-image: url(spritesmith-main-9.png); - background-position: -1378px -1359px; + background-position: -1484px -954px; width: 105px; height: 105px; } .Mount_Head_PandaCub-Shade { background-image: url(spritesmith-main-9.png); - background-position: -1544px 0px; + background-position: -1484px -1060px; width: 105px; height: 105px; } .Mount_Head_PandaCub-Skeleton { background-image: url(spritesmith-main-9.png); - background-position: -1544px -106px; + background-position: -1484px -1166px; width: 105px; height: 105px; } .Mount_Head_PandaCub-Spooky { background-image: url(spritesmith-main-9.png); - background-position: -1544px -212px; + background-position: -1484px -1272px; width: 105px; height: 105px; } .Mount_Head_PandaCub-White { background-image: url(spritesmith-main-9.png); - background-position: -1544px -318px; + background-position: 0px -1423px; width: 105px; height: 105px; } .Mount_Head_PandaCub-Zombie { background-image: url(spritesmith-main-9.png); - background-position: -1544px -424px; + background-position: -106px -1423px; width: 105px; height: 105px; } .Mount_Head_Parrot-Base { background-image: url(spritesmith-main-9.png); - background-position: -1544px -530px; + background-position: -212px -1423px; width: 105px; height: 105px; } .Mount_Head_Parrot-CottonCandyBlue { background-image: url(spritesmith-main-9.png); - background-position: -1544px -636px; + background-position: -318px -1423px; width: 105px; height: 105px; } .Mount_Head_Parrot-CottonCandyPink { background-image: url(spritesmith-main-9.png); - background-position: -1544px -742px; + background-position: -424px -1423px; width: 105px; height: 105px; } .Mount_Head_Parrot-Desert { background-image: url(spritesmith-main-9.png); - background-position: -1544px -848px; + background-position: -530px -1423px; width: 105px; height: 105px; } .Mount_Head_Parrot-Golden { background-image: url(spritesmith-main-9.png); - background-position: -1544px -954px; + background-position: -636px -1423px; width: 105px; height: 105px; } .Mount_Head_Parrot-Red { background-image: url(spritesmith-main-9.png); - background-position: -1544px -1060px; + background-position: -742px -1423px; width: 105px; height: 105px; } .Mount_Head_Parrot-Shade { background-image: url(spritesmith-main-9.png); - background-position: -1544px -1166px; + background-position: -848px -1423px; width: 105px; height: 105px; } .Mount_Head_Parrot-Skeleton { background-image: url(spritesmith-main-9.png); - background-position: -1544px -1272px; + background-position: -954px -1423px; width: 105px; height: 105px; } .Mount_Head_Parrot-White { background-image: url(spritesmith-main-9.png); - background-position: 0px -1465px; + background-position: -1060px -1423px; width: 105px; height: 105px; } .Mount_Head_Parrot-Zombie { background-image: url(spritesmith-main-9.png); - background-position: -106px -1465px; + background-position: -1166px -1423px; width: 105px; height: 105px; } .Mount_Head_Penguin-Base { background-image: url(spritesmith-main-9.png); - background-position: -212px -1465px; + background-position: -1272px -1423px; width: 105px; height: 105px; } .Mount_Head_Penguin-CottonCandyBlue { background-image: url(spritesmith-main-9.png); - background-position: -318px -1465px; + background-position: -1378px -1423px; width: 105px; height: 105px; } .Mount_Head_Penguin-CottonCandyPink { background-image: url(spritesmith-main-9.png); - background-position: -424px -1465px; + background-position: -1484px -1423px; width: 105px; height: 105px; } .Mount_Head_Penguin-Desert { background-image: url(spritesmith-main-9.png); - background-position: -530px -1465px; + background-position: -1590px 0px; width: 105px; height: 105px; } .Mount_Head_Penguin-Golden { background-image: url(spritesmith-main-9.png); - background-position: -636px -1465px; + background-position: -1590px -106px; width: 105px; height: 105px; } .Mount_Head_Penguin-Red { background-image: url(spritesmith-main-9.png); - background-position: -742px -1465px; + background-position: -1590px -212px; width: 105px; height: 105px; } .Mount_Head_Penguin-Shade { background-image: url(spritesmith-main-9.png); - background-position: -848px -1465px; + background-position: -1590px -318px; width: 105px; height: 105px; } .Mount_Head_Penguin-Skeleton { background-image: url(spritesmith-main-9.png); - background-position: -954px -1465px; + background-position: -1590px -424px; width: 105px; height: 105px; } .Mount_Head_Penguin-White { background-image: url(spritesmith-main-9.png); - background-position: -1060px -1465px; + background-position: -1590px -530px; width: 105px; height: 105px; } .Mount_Head_Penguin-Zombie { background-image: url(spritesmith-main-9.png); - background-position: -1166px -1465px; + background-position: -1590px -636px; width: 105px; height: 105px; } .Mount_Head_Phoenix-Base { background-image: url(spritesmith-main-9.png); - background-position: -1272px -1465px; + background-position: -1590px -742px; width: 105px; height: 105px; } .Mount_Head_Rat-Base { background-image: url(spritesmith-main-9.png); - background-position: -1378px -1465px; + background-position: -1590px -848px; width: 105px; height: 105px; } .Mount_Head_Rat-CottonCandyBlue { background-image: url(spritesmith-main-9.png); - background-position: -1484px -1465px; + background-position: -1590px -954px; width: 105px; height: 105px; } .Mount_Head_Rat-CottonCandyPink { background-image: url(spritesmith-main-9.png); - background-position: -1650px 0px; + background-position: -1590px -1060px; width: 105px; height: 105px; } .Mount_Head_Rat-Desert { background-image: url(spritesmith-main-9.png); - background-position: -1650px -106px; + background-position: -1590px -1166px; width: 105px; height: 105px; } .Mount_Head_Rat-Golden { background-image: url(spritesmith-main-9.png); - background-position: -1650px -212px; + background-position: -1590px -1272px; width: 105px; height: 105px; } .Mount_Head_Rat-Red { background-image: url(spritesmith-main-9.png); - background-position: -1650px -318px; + background-position: -1590px -1378px; width: 105px; height: 105px; } .Mount_Head_Rat-Shade { background-image: url(spritesmith-main-9.png); - background-position: -1650px -424px; + background-position: 0px -1529px; width: 105px; height: 105px; } .Mount_Head_Rat-Skeleton { background-image: url(spritesmith-main-9.png); - background-position: -1650px -530px; + background-position: -106px -1529px; width: 105px; height: 105px; } .Mount_Head_Rat-White { background-image: url(spritesmith-main-9.png); - background-position: -1650px -636px; + background-position: -212px -1529px; width: 105px; height: 105px; } .Mount_Head_Rat-Zombie { background-image: url(spritesmith-main-9.png); - background-position: -1650px -742px; + background-position: -318px -1529px; width: 105px; height: 105px; } .Mount_Head_Rock-Base { background-image: url(spritesmith-main-9.png); - background-position: -1650px -848px; + background-position: -424px -1529px; width: 105px; height: 105px; } .Mount_Head_Rock-CottonCandyBlue { background-image: url(spritesmith-main-9.png); - background-position: -1650px -954px; + background-position: -530px -1529px; width: 105px; height: 105px; } .Mount_Head_Rock-CottonCandyPink { background-image: url(spritesmith-main-9.png); - background-position: -1650px -1060px; + background-position: -636px -1529px; width: 105px; height: 105px; } .Mount_Head_Rock-Desert { background-image: url(spritesmith-main-9.png); - background-position: -1650px -1166px; + background-position: -742px -1529px; width: 105px; height: 105px; } .Mount_Head_Rock-Golden { background-image: url(spritesmith-main-9.png); - background-position: -1650px -1272px; + background-position: -848px -1529px; width: 105px; height: 105px; } .Mount_Head_Rock-Red { background-image: url(spritesmith-main-9.png); - background-position: -1650px -1378px; + background-position: -954px -1529px; width: 105px; height: 105px; } .Mount_Head_Rock-Shade { background-image: url(spritesmith-main-9.png); - background-position: 0px -1571px; + background-position: -1060px -1529px; width: 105px; height: 105px; } .Mount_Head_Rock-Skeleton { background-image: url(spritesmith-main-9.png); - background-position: -106px -1571px; + background-position: -1166px -1529px; width: 105px; height: 105px; } .Mount_Head_Rock-White { background-image: url(spritesmith-main-9.png); - background-position: -212px -1571px; + background-position: -1272px -1529px; width: 105px; height: 105px; } .Mount_Head_Rock-Zombie { background-image: url(spritesmith-main-9.png); - background-position: -318px -1571px; + background-position: -1378px -1529px; width: 105px; height: 105px; } .Mount_Head_Rooster-Base { background-image: url(spritesmith-main-9.png); - background-position: -424px -1571px; + background-position: -1484px -1529px; width: 105px; height: 105px; } .Mount_Head_Rooster-CottonCandyBlue { background-image: url(spritesmith-main-9.png); - background-position: -530px -1571px; + background-position: -1590px -1529px; width: 105px; height: 105px; } .Mount_Head_Rooster-CottonCandyPink { background-image: url(spritesmith-main-9.png); - background-position: -636px -1571px; + background-position: -1696px 0px; width: 105px; height: 105px; } .Mount_Head_Rooster-Desert { background-image: url(spritesmith-main-9.png); - background-position: -742px -1571px; + background-position: -1696px -106px; width: 105px; height: 105px; } .Mount_Head_Rooster-Golden { background-image: url(spritesmith-main-9.png); - background-position: -848px -1571px; + background-position: -1696px -212px; width: 105px; height: 105px; } .Mount_Head_Rooster-Red { background-image: url(spritesmith-main-9.png); - background-position: -954px -1571px; + background-position: -1696px -318px; width: 105px; height: 105px; } .Mount_Head_Rooster-Shade { background-image: url(spritesmith-main-9.png); - background-position: -1060px -1571px; + background-position: -1272px -318px; width: 105px; height: 105px; } .Mount_Head_Rooster-Skeleton { background-image: url(spritesmith-main-9.png); - background-position: -1166px -1571px; + background-position: -1696px -424px; width: 105px; height: 105px; } -.Mount_Head_Rooster-White { - background-image: url(spritesmith-main-9.png); - background-position: -1272px -1571px; - width: 105px; - height: 105px; -} -.Mount_Head_Rooster-Zombie { - background-image: url(spritesmith-main-9.png); - background-position: -1378px -1571px; - width: 105px; - height: 105px; -} -.Mount_Head_Sabretooth-Base { - background-image: url(spritesmith-main-9.png); - background-position: 0px -136px; - width: 135px; - height: 135px; -} -.Mount_Head_Sabretooth-CottonCandyBlue { - background-image: url(spritesmith-main-9.png); - background-position: -136px 0px; - width: 135px; - height: 135px; -} -.Mount_Head_Sabretooth-CottonCandyPink { - background-image: url(spritesmith-main-9.png); - background-position: -136px -136px; - width: 135px; - height: 135px; -} -.Mount_Head_Sabretooth-Desert { - background-image: url(spritesmith-main-9.png); - background-position: 0px 0px; - width: 135px; - height: 135px; -} diff --git a/common/dist/sprites/spritesmith-main-9.png b/common/dist/sprites/spritesmith-main-9.png index c0d8bf77fb..9f49bf6844 100644 Binary files a/common/dist/sprites/spritesmith-main-9.png and b/common/dist/sprites/spritesmith-main-9.png differ diff --git a/common/img/sprites/spritesmith/backgrounds/background_idyllic_cabin.png b/common/img/sprites/spritesmith/backgrounds/background_idyllic_cabin.png new file mode 100644 index 0000000000..5d4c3ae1a4 Binary files /dev/null and b/common/img/sprites/spritesmith/backgrounds/background_idyllic_cabin.png differ diff --git a/common/img/sprites/spritesmith/backgrounds/background_mountain_pyramid.png b/common/img/sprites/spritesmith/backgrounds/background_mountain_pyramid.png new file mode 100644 index 0000000000..2747511646 Binary files /dev/null and b/common/img/sprites/spritesmith/backgrounds/background_mountain_pyramid.png differ diff --git a/common/img/sprites/spritesmith/backgrounds/background_stormy_ship.png b/common/img/sprites/spritesmith/backgrounds/background_stormy_ship.png new file mode 100644 index 0000000000..06527d4784 Binary files /dev/null and b/common/img/sprites/spritesmith/backgrounds/background_stormy_ship.png differ diff --git a/common/img/sprites/spritesmith/gear/armoire/broad_armor_armoire_falconerArmor.png b/common/img/sprites/spritesmith/gear/armoire/broad_armor_armoire_falconerArmor.png new file mode 100644 index 0000000000..1608dd42ea Binary files /dev/null and b/common/img/sprites/spritesmith/gear/armoire/broad_armor_armoire_falconerArmor.png differ diff --git a/common/img/sprites/spritesmith/gear/armoire/head_armoire_falconerCap.png b/common/img/sprites/spritesmith/gear/armoire/head_armoire_falconerCap.png new file mode 100644 index 0000000000..f0e646645e Binary files /dev/null and b/common/img/sprites/spritesmith/gear/armoire/head_armoire_falconerCap.png differ diff --git a/common/img/sprites/spritesmith/gear/armoire/shield_armoire_perchingFalcon.png b/common/img/sprites/spritesmith/gear/armoire/shield_armoire_perchingFalcon.png new file mode 100644 index 0000000000..463c57d788 Binary files /dev/null and b/common/img/sprites/spritesmith/gear/armoire/shield_armoire_perchingFalcon.png differ diff --git a/common/img/sprites/spritesmith/gear/armoire/shop/shop_armor_armoire_falconerArmor.png b/common/img/sprites/spritesmith/gear/armoire/shop/shop_armor_armoire_falconerArmor.png new file mode 100644 index 0000000000..ba755b236d Binary files /dev/null and b/common/img/sprites/spritesmith/gear/armoire/shop/shop_armor_armoire_falconerArmor.png differ diff --git a/common/img/sprites/spritesmith/gear/armoire/shop/shop_head_armoire_falconerCap.png b/common/img/sprites/spritesmith/gear/armoire/shop/shop_head_armoire_falconerCap.png new file mode 100644 index 0000000000..cd40af5723 Binary files /dev/null and b/common/img/sprites/spritesmith/gear/armoire/shop/shop_head_armoire_falconerCap.png differ diff --git a/common/img/sprites/spritesmith/gear/armoire/shop/shop_shield_armoire_perchingFalcon.png b/common/img/sprites/spritesmith/gear/armoire/shop/shop_shield_armoire_perchingFalcon.png new file mode 100644 index 0000000000..262b0177b1 Binary files /dev/null and b/common/img/sprites/spritesmith/gear/armoire/shop/shop_shield_armoire_perchingFalcon.png differ diff --git a/common/img/sprites/spritesmith/gear/armoire/slim_armor_armoire_falconerArmor.png b/common/img/sprites/spritesmith/gear/armoire/slim_armor_armoire_falconerArmor.png new file mode 100644 index 0000000000..d905267343 Binary files /dev/null and b/common/img/sprites/spritesmith/gear/armoire/slim_armor_armoire_falconerArmor.png differ diff --git a/common/img/sprites/spritesmith/gear/events/mystery_201607/broad_armor_mystery_201607.png b/common/img/sprites/spritesmith/gear/events/mystery_201607/broad_armor_mystery_201607.png new file mode 100644 index 0000000000..20c590dd5c Binary files /dev/null and b/common/img/sprites/spritesmith/gear/events/mystery_201607/broad_armor_mystery_201607.png differ diff --git a/common/img/sprites/spritesmith/gear/events/mystery_201607/head_mystery_201607.png b/common/img/sprites/spritesmith/gear/events/mystery_201607/head_mystery_201607.png new file mode 100644 index 0000000000..abfd0e19ad Binary files /dev/null and b/common/img/sprites/spritesmith/gear/events/mystery_201607/head_mystery_201607.png differ diff --git a/common/img/sprites/spritesmith/gear/events/mystery_201607/shop_armor_mystery_201607.png b/common/img/sprites/spritesmith/gear/events/mystery_201607/shop_armor_mystery_201607.png new file mode 100644 index 0000000000..fdf2302513 Binary files /dev/null and b/common/img/sprites/spritesmith/gear/events/mystery_201607/shop_armor_mystery_201607.png differ diff --git a/common/img/sprites/spritesmith/gear/events/mystery_201607/shop_head_mystery_201607.png b/common/img/sprites/spritesmith/gear/events/mystery_201607/shop_head_mystery_201607.png new file mode 100644 index 0000000000..3a0976c9a9 Binary files /dev/null and b/common/img/sprites/spritesmith/gear/events/mystery_201607/shop_head_mystery_201607.png differ diff --git a/common/img/sprites/spritesmith/gear/events/mystery_201607/slim_armor_mystery_201607.png b/common/img/sprites/spritesmith/gear/events/mystery_201607/slim_armor_mystery_201607.png new file mode 100644 index 0000000000..9944f54172 Binary files /dev/null and b/common/img/sprites/spritesmith/gear/events/mystery_201607/slim_armor_mystery_201607.png differ diff --git a/common/img/sprites/spritesmith/npcs/npc_alex.png b/common/img/sprites/spritesmith/npcs/npc_alex.png index b5175c697b..e904970937 100644 Binary files a/common/img/sprites/spritesmith/npcs/npc_alex.png and b/common/img/sprites/spritesmith/npcs/npc_alex.png differ diff --git a/common/img/sprites/spritesmith/npcs/npc_bailey.png b/common/img/sprites/spritesmith/npcs/npc_bailey.png index f6ce232f91..f6e58617a8 100644 Binary files a/common/img/sprites/spritesmith/npcs/npc_bailey.png and b/common/img/sprites/spritesmith/npcs/npc_bailey.png differ diff --git a/common/img/sprites/spritesmith/npcs/npc_daniel.png b/common/img/sprites/spritesmith/npcs/npc_daniel.png index 4e79603122..b12dd9e254 100644 Binary files a/common/img/sprites/spritesmith/npcs/npc_daniel.png and b/common/img/sprites/spritesmith/npcs/npc_daniel.png differ diff --git a/common/img/sprites/spritesmith/npcs/npc_ian.png b/common/img/sprites/spritesmith/npcs/npc_ian.png deleted file mode 100644 index db4b9883bf..0000000000 Binary files a/common/img/sprites/spritesmith/npcs/npc_ian.png and /dev/null differ diff --git a/common/img/sprites/spritesmith/npcs/npc_justin.png b/common/img/sprites/spritesmith/npcs/npc_justin.png index 28a58235d3..08cb56f206 100644 Binary files a/common/img/sprites/spritesmith/npcs/npc_justin.png and b/common/img/sprites/spritesmith/npcs/npc_justin.png differ diff --git a/common/img/sprites/spritesmith/npcs/npc_matt.png b/common/img/sprites/spritesmith/npcs/npc_matt.png index 5998391df7..b643153c46 100644 Binary files a/common/img/sprites/spritesmith/npcs/npc_matt.png and b/common/img/sprites/spritesmith/npcs/npc_matt.png differ diff --git a/common/img/sprites/spritesmith/npcs/npc_timetravelers_active.png b/common/img/sprites/spritesmith/npcs/npc_timetravelers_active.png index e14e0d32ba..f84a5ba2e0 100644 Binary files a/common/img/sprites/spritesmith/npcs/npc_timetravelers_active.png and b/common/img/sprites/spritesmith/npcs/npc_timetravelers_active.png differ diff --git a/common/img/sprites/spritesmith/stable/pets/Pet-Gryphon-RoyalPurple.png b/common/img/sprites/spritesmith/stable/pets/Pet-Gryphon-RoyalPurple.png new file mode 100644 index 0000000000..bd83845408 Binary files /dev/null and b/common/img/sprites/spritesmith/stable/pets/Pet-Gryphon-RoyalPurple.png differ diff --git a/common/img/sprites/spritesmith_large/promo/promo_backgrounds_armoire_201608.png b/common/img/sprites/spritesmith_large/promo/promo_backgrounds_armoire_201608.png new file mode 100644 index 0000000000..34755d8671 Binary files /dev/null and b/common/img/sprites/spritesmith_large/promo/promo_backgrounds_armoire_201608.png differ diff --git a/common/img/sprites/spritesmith_large/promo/promo_mystery_201607.png b/common/img/sprites/spritesmith_large/promo/promo_mystery_201607.png new file mode 100644 index 0000000000..52a7913e57 Binary files /dev/null and b/common/img/sprites/spritesmith_large/promo/promo_mystery_201607.png differ diff --git a/common/img/sprites/spritesmith_large/promo/promo_unconventional_armor.png b/common/img/sprites/spritesmith_large/promo/promo_unconventional_armor.png new file mode 100644 index 0000000000..23147048b1 Binary files /dev/null and b/common/img/sprites/spritesmith_large/promo/promo_unconventional_armor.png differ diff --git a/common/locales/en/backgrounds.json b/common/locales/en/backgrounds.json index b2981d3d04..956033fee0 100644 --- a/common/locales/en/backgrounds.json +++ b/common/locales/en/backgrounds.json @@ -207,5 +207,13 @@ "backgroundDeepSeaText": "Deep Sea", "backgroundDeepSeaNotes": "Dive to the Deep Sea.", "backgroundDilatoryCastleText": "Castle of Dilatory", - "backgroundDilatoryCastleNotes": "Swim past the Castle of Dilatory." + "backgroundDilatoryCastleNotes": "Swim past the Castle of Dilatory.", + + "backgrounds082016": "SET 27: Released August 2016", + "backgroundIdyllicCabinText": "Idyllic Cabin", + "backgroundIdyllicCabinNotes": "Retreat to an Idyllic Cabin.", + "backgroundMountainPyramidText": "Mountain Pyramid", + "backgroundMountainPyramidNotes": "Climb the many steps of a Mountain Pyramid.", + "backgroundStormyShipText": "Stormy Ship", + "backgroundStormyShipNotes": "Hold steady against wind and wave aboard a Stormy Ship." } diff --git a/common/locales/en/front.json b/common/locales/en/front.json index 7c0621910b..6e4dfec28f 100644 --- a/common/locales/en/front.json +++ b/common/locales/en/front.json @@ -67,6 +67,7 @@ "goalSample4": "Japanese lesson on Duolingo", "goalSample5": "Read an Informative Article", "goals": "Goals", + "guidanceForBlacksmiths": "Guidance for Blacksmiths", "health": "Health", "healthSample1": "Drink Water/Soda", "healthSample2": "Chew Gum/Smoke", @@ -167,6 +168,7 @@ "teams": "Teams", "terms": "Terms and Conditions", "testimonialHeading": "What people say...", + "tumblr": "Tumblr", "localStorageTryFirst": "If you are experiencing problems with Habitica, click the button below to clear local storage for this website (other websites will not be affected). You will need to log in again after doing this, so first be sure that you know your log-in details, which can be found at Settings -> <%= linkStart %>Site<%= linkEnd %>.", "localStorageTryNext": "If the problem persists, please <%= linkStart %>Report a Bug<%= linkEnd %> if you haven't already.", "localStorageClearing": "Clearing Local Storage", diff --git a/common/locales/en/gear.json b/common/locales/en/gear.json index 29132e21c4..0e1b411559 100644 --- a/common/locales/en/gear.json +++ b/common/locales/en/gear.json @@ -442,6 +442,8 @@ "armorMystery201605Notes": "Unlike the traditional bards who join adventuring parties, bards who join Habitican marching bands are known for grand parades, not dungeon raids. Confers no benefit. May 2016 Subscriber Item.", "armorMystery201606Text": "Selkie Tail", "armorMystery201606Notes": "This strong tail shimmers like sea foam crashing upon the shore. Confers no benefit. June 2016 Subscriber Item.", + "armorMystery201607Text": "Seafloor Rogue Armor", + "armorMystery201607Notes": "Blend into the sea floor with this stealthy aquatic armor. Confers no benefit. July 2016 Subscriber Item.", "armorMystery301404Text": "Steampunk Suit", "armorMystery301404Notes": "Dapper and dashing, wot! Confers no benefit. February 3015 Subscriber Item.", @@ -479,6 +481,8 @@ "armorArmoireStripedSwimsuitNotes": "What could be more fun than battling sea monsters on the beach? Increases Constitution by <%= con %>. Enchanted Armoire: Seaside Set (Item 2 of 3).", "armorArmoireCannoneerRagsText": "Cannoneer Rags", "armorArmoireCannoneerRagsNotes": "These rags be tougher than they look. Increases Constitution by <%= con %>. Enchanted Armoire: Cannoneer Set (Item 2 of 3).", + "armorArmoireFalconerArmorText": "Falconer Armor", + "armorArmoireFalconerArmorNotes": "Keep away talon attacks with this sturdy armor! Increases Constitution by <%= con %>. Enchanted Armoire: Falconer Set (Item 1 of 3).", "headgear": "headgear", "headgearCapitalized": "Headgear", @@ -687,6 +691,8 @@ "headMystery201605Notes": "Seventy-six dragons led the big parade, with a hundred and ten gryphons close at hand! Confers no benefit. May 2016 Subscriber Item.", "headMystery201606Text": "Selkie Cap", "headMystery201606Notes": "Hum the tune of the ocean as you blend in with the frolicking seals! Confers no benefit. June 2016 Subscriber Item.", + "headMystery201607Text": "Seafloor Rogue Helm", + "headMystery201607Notes": "The kelp growing from this helm helps camouflage you. Confers no benefit. July 2016 Subscriber Item.", "headMystery301404Text": "Fancy Top Hat", "headMystery301404Notes": "A fancy top hat for the finest of gentlefolk! January 3015 Subscriber Item. Confers no benefit.", "headMystery301405Text": "Basic Top Hat", @@ -742,6 +748,8 @@ "headArmoireGreenFloppyHatNotes": "Many spells have been sewn into this simple hat, giving it a gorgeous green color. Increases Constitution, Intelligence, and Perception by <%= attrs %> each. Enchanted Armoire: Independent Item.", "headArmoireCannoneerBandannaText": "Cannoneer Bandanna", "headArmoireCannoneerBandannaNotes": "'Tis a cannoneer's life for me! Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Cannoneer Set (Item 3 of 3).", + "headArmoireFalconerCapText": "Falconer Cap", + "headArmoireFalconerCapNotes": "This jaunty cap helps you better understand birds of prey. Increases Intelligence by <%= int %>. Enchanted Armoire: Falconer Set (Item 2 of 3).", "offhand": "shield-hand item", "offhandCapitalized": "Shield-Hand Item", @@ -877,6 +885,8 @@ "shieldArmoireFloralBouquetNotes": "Not much help in battle, but aren't they beautiful? Increases Constitution by <%= con %>. Enchanted Armoire: Independent Item.", "shieldArmoireSandyBucketText": "Sandy Bucket", "shieldArmoireSandyBucketNotes": "Good for storing all that Gold that you'll earn from completing tasks! Increases Perception by <%= per %>. Enchanted Armoire: Seaside Set (Item 3 of 3).", + "shieldArmoirePerchingFalconText": "Perching Falcon", + "shieldArmoirePerchingFalconNotes": "A falcon friend perches on your arm, prepared to swoop at your enemies. Increases Strength by <%= str %>. Enchanted Armoire: Falconer Set (Item 3 of 3).", "back": "Back Accessory", "backBase0Text": "No Back Accessory", diff --git a/common/locales/en/generic.json b/common/locales/en/generic.json index c374357dc8..52b9d72a41 100644 --- a/common/locales/en/generic.json +++ b/common/locales/en/generic.json @@ -117,6 +117,7 @@ "audioTheme_gokulTheme": "Gokul Theme", "audioTheme_luneFoxTheme": "LuneFox's Theme", "audioTheme_rosstavoTheme": "Rosstavo's Theme", + "audioTheme_dewinTheme": "Dewin's Theme", "askQuestion": "Ask a Question", "reportBug": "Report a Bug", "HabiticaWiki": "The Habitica Wiki", diff --git a/common/locales/en/npc.json b/common/locales/en/npc.json index 55ad9377c4..fa93c62ec7 100644 --- a/common/locales/en/npc.json +++ b/common/locales/en/npc.json @@ -11,6 +11,7 @@ "danielText2Broken": "Oh... If you are participating in a boss quest, the boss will still damage you for your party mates' missed Dailies... Also, your own damage to the Boss (or items collected) will not be applied until you check out of the Inn...", "alexander": "Alexander the Merchant", "welcomeMarket": "Welcome to the Market! Buy hard-to-find eggs and potions! Sell your extras! Commission useful services! Come see what we have to offer.", + "welcomeMarketMobile": "Welcome to the Market! Buy hard-to-find eggs and potions! Come see what we have to offer.", "displayItemForGold": "Do you want to sell a <%= itemType %>?", "displayEggForGold": "Do you want to sell a <%= itemType %> Egg?", "displayPotionForGold": "Do you want to sell a <%= itemType %> Potion?", @@ -20,6 +21,7 @@ "justin": "Justin", "ian": "Ian", "ianText": "Welcome to the Quest Shop! Here you can use Quest Scrolls to battle monsters with your friends. Be sure to check out our fine array of Quest Scrolls for purchase on the right!", + "ianTextMobile": "Welcome to the Quest Shop! Be sure to check out our fine array of Quest Scrolls for purchase!", "ianBrokenText": "Welcome to the Quest Shop... Here you can use Quest Scrolls to battle monsters with your friends... Be sure to check out our fine array of Quest Scrolls for purchase on the right...", "missingKeyParam": "\"req.params.key\" is required.", diff --git a/common/locales/en/settings.json b/common/locales/en/settings.json index e854bebd05..0fdfe59c7d 100644 --- a/common/locales/en/settings.json +++ b/common/locales/en/settings.json @@ -66,7 +66,6 @@ "deleteLocalAccountText": "Are you sure? This will delete your account forever, and it can never be restored! You will need to register a new account to use Habitica again. Banked or spent Gems will not be refunded. If you're absolutely certain, type your password into the text box below.", "API": "API", "APIv3": "API v3", - "APIv2": "API v2 - Deprecated", "APIText": "Copy these for use in third party applications. However, think of your API Token like a password, and do not share it publicly. You may occasionally be asked for your User ID, but never post your API Token where others can see it, including on Github.", "APIToken": "API Token (this is a password - see warning above!)", "thirdPartyApps": "Third Party Apps", diff --git a/common/locales/en/subscriber.json b/common/locales/en/subscriber.json index ec35adbc90..264b6e107c 100644 --- a/common/locales/en/subscriber.json +++ b/common/locales/en/subscriber.json @@ -73,6 +73,7 @@ "timeTravelersTitleNoSub": "<%= linkStartTyler %>Tyler<%= linkEnd %> and <%= linkStartVicky %>Vicky<%= linkEnd %>", "timeTravelersTitle": "Mysterious Time Travelers", "timeTravelersPopoverNoSub": "You'll need a Mystic Hourglass to summon the mysterious Time Travelers! <%= linkStart %>Subscribers<%= linkEnd %> earn one Mystic Hourglass for every three months of consecutive subscribing. Come back when you have a Mystic Hourglass, and the Time Travelers will fetch you a rare pet, mount, or Subscriber Item Set from the past... or maybe even the future.", + "timeTravelersPopoverNoSubMobile": "You'll need a Mystic Hourglass to summon the mysterious Time Travelers! Subscribers earn one Mystic Hourglass for every three months of consecutive subscribing. Come back when you have a Mystic Hourglass, and the Time Travelers will fetch you a rare pet, mount, or Subscriber Item Set from the past... or maybe even the future.", "timeTravelersPopover": "We see you have a Mystic Hourglass, so we will happily travel back in time for you! Please choose the pet, mount, or Mystery Item Set you would like. You can see a list of the past item sets here! If those don't satisfy you, perhaps you'd be interested in one of our fashionably futuristic Steampunk Item Sets?", "timeTravelersAlreadyOwned": "Congratulations! You already own everything the Time Travelers currently offer. Thanks for supporting the site!", "mysticHourglassPopover": "A Mystic Hourglass allows you to purchase certain limited-time items, such as monthly Mystery Item Sets and awards from world bosses, from the past!", @@ -109,6 +110,7 @@ "mysterySet201604": "Leaf Warrior Set", "mysterySet201605": "Marching Bard Set", "mysterySet201606": "Selkie Robes Set", + "mysterySet201607": "Seafloor Rogue Set", "mysterySet301404": "Steampunk Standard Set", "mysterySet301405": "Steampunk Accessories Set", diff --git a/common/script/content/appearance/backgrounds.js b/common/script/content/appearance/backgrounds.js index d6881f1458..df9e64c321 100644 --- a/common/script/content/appearance/backgrounds.js +++ b/common/script/content/appearance/backgrounds.js @@ -367,6 +367,20 @@ let backgrounds = { notes: t('backgroundDeepSeaNotes'), }, }, + backgrounds082016: { + idyllic_cabin: { + text: t('backgroundIdyllicCabinText'), + notes: t('backgroundIdyllicCabinNotes'), + }, + mountain_pyramid: { + text: t('backgroundMountainPyramidText'), + notes: t('backgroundMountainPyramidNotes'), + }, + stormy_ship: { + text: t('backgroundStormyShipText'), + notes: t('backgroundStormyShipNotes'), + }, + }, }; /* eslint-enable quote-props */ diff --git a/common/script/content/gear/index.js b/common/script/content/gear/index.js index d7013e9986..5137539c40 100644 --- a/common/script/content/gear/index.js +++ b/common/script/content/gear/index.js @@ -71,7 +71,7 @@ each(GEAR_TYPES, (type) => { }; } - if (item.mystery) { + if (item.mystery || key.indexOf('takeThis') !== -1) { item.canOwn = ownsItem(key); } diff --git a/common/script/content/gear/sets/armoire.js b/common/script/content/gear/sets/armoire.js index 03a1a45e2d..6c69c5dc89 100644 --- a/common/script/content/gear/sets/armoire.js +++ b/common/script/content/gear/sets/armoire.js @@ -150,6 +150,14 @@ let armor = { set: 'cannoneer', canOwn: ownsItem('armor_armoire_cannoneerRags'), }, + falconerArmor: { + text: t('armorArmoireFalconerArmorText'), + notes: t('armorArmoireFalconerArmorNotes', { con: 10 }), + value: 100, + con: 10, + set: 'falconer', + canOwn: ownsItem('armor_armoire_falconerArmor'), + }, }; let eyewear = { @@ -380,6 +388,14 @@ let head = { set: 'cannoneer', canOwn: ownsItem('head_armoire_cannoneerBandanna'), }, + falconerCap: { + text: t('headArmoireFalconerCapText'), + notes: t('headArmoireFalconerCapNotes', { int: 10 }), + value: 100, + int: 10, + set: 'falconer', + canOwn: ownsItem('head_armoire_falconerCap'), + }, }; let shield = { @@ -440,6 +456,14 @@ let shield = { set: 'seaside', canOwn: ownsItem('shield_armoire_sandyBucket'), }, + perchingFalcon: { + text: t('shieldArmoirePerchingFalconText'), + notes: t('shieldArmoirePerchingFalconNotes', { str: 16 }), + value: 100, + str: 16, + set: 'falconer', + canOwn: ownsItem('shield_armoire_perchingFalcon'), + }, }; let headAccessory = { diff --git a/common/script/content/gear/sets/mystery.js b/common/script/content/gear/sets/mystery.js index ff554f1261..c9b2efb1e7 100644 --- a/common/script/content/gear/sets/mystery.js +++ b/common/script/content/gear/sets/mystery.js @@ -127,6 +127,12 @@ let armor = { mystery: '201606', value: 0, }, + 201607: { + text: t('armorMystery201607Text'), + notes: t('armorMystery201607Notes'), + mystery: '201607', + value: 0, + }, 301404: { text: t('armorMystery301404Text'), notes: t('armorMystery301404Notes'), @@ -328,6 +334,12 @@ let head = { mystery: '201606', value: 0, }, + 201607: { + text: t('headMystery201607Text'), + notes: t('headMystery201607Notes'), + mystery: '201607', + value: 0, + }, 301404: { text: t('headMystery301404Text'), notes: t('headMystery301404Notes'), diff --git a/common/script/content/gear/sets/special/index.js b/common/script/content/gear/sets/special/index.js index caf610880b..69711f9a79 100644 --- a/common/script/content/gear/sets/special/index.js +++ b/common/script/content/gear/sets/special/index.js @@ -96,9 +96,6 @@ let armor = { notes: t('armorSpecialSummerRogueNotes', { per: 15 }), value: 90, per: 15, - canBuy: () => { - return true; - }, }, summerWarrior: { event: EVENTS.summer, @@ -107,9 +104,6 @@ let armor = { notes: t('armorSpecialSummerWarriorNotes', { con: 9 }), value: 90, con: 9, - canBuy: () => { - return true; - }, }, summerMage: { event: EVENTS.summer, @@ -118,9 +112,6 @@ let armor = { notes: t('armorSpecialSummerMageNotes', { int: 9 }), value: 90, int: 9, - canBuy: () => { - return true; - }, }, summerHealer: { event: EVENTS.summer, @@ -129,9 +120,6 @@ let armor = { notes: t('armorSpecialSummerHealerNotes', { con: 15 }), value: 90, con: 15, - canBuy: () => { - return true; - }, }, fallRogue: { event: EVENTS.fall, @@ -242,9 +230,6 @@ let armor = { notes: t('armorSpecialSummer2015RogueNotes', { per: 15 }), value: 90, per: 15, - canBuy: () => { - return true; - }, }, summer2015Warrior: { event: EVENTS.summer2015, @@ -253,9 +238,6 @@ let armor = { notes: t('armorSpecialSummer2015WarriorNotes', { con: 9 }), value: 90, con: 9, - canBuy: () => { - return true; - }, }, summer2015Mage: { event: EVENTS.summer2015, @@ -264,9 +246,6 @@ let armor = { notes: t('armorSpecialSummer2015MageNotes', { int: 9 }), value: 90, int: 9, - canBuy: () => { - return true; - }, }, summer2015Healer: { event: EVENTS.summer2015, @@ -275,9 +254,6 @@ let armor = { notes: t('armorSpecialSummer2015HealerNotes', { con: 15 }), value: 90, con: 15, - canBuy: () => { - return true; - }, }, fall2015Rogue: { event: EVENTS.fall2015, @@ -438,9 +414,6 @@ let body = { text: t('bodySpecialSummerHealerText'), notes: t('bodySpecialSummerHealerNotes'), value: 20, - canBuy: () => { - return true; - }, }, summerMage: { event: EVENTS.summer, @@ -448,9 +421,6 @@ let body = { text: t('bodySpecialSummerMageText'), notes: t('bodySpecialSummerMageNotes'), value: 20, - canBuy: () => { - return true; - }, }, summer2015Healer: { event: EVENTS.summer2015, @@ -458,9 +428,6 @@ let body = { text: t('bodySpecialSummer2015HealerText'), notes: t('bodySpecialSummer2015HealerNotes'), value: 20, - canBuy: () => { - return true; - }, }, summer2015Mage: { event: EVENTS.summer2015, @@ -468,9 +435,6 @@ let body = { text: t('bodySpecialSummer2015MageText'), notes: t('bodySpecialSummer2015MageNotes'), value: 20, - canBuy: () => { - return true; - }, }, summer2015Rogue: { event: EVENTS.summer2015, @@ -478,9 +442,6 @@ let body = { text: t('bodySpecialSummer2015RogueText'), notes: t('bodySpecialSummer2015RogueNotes'), value: 20, - canBuy: () => { - return true; - }, }, summer2015Warrior: { event: EVENTS.summer2015, @@ -488,9 +449,6 @@ let body = { text: t('bodySpecialSummer2015WarriorText'), notes: t('bodySpecialSummer2015WarriorNotes'), value: 20, - canBuy: () => { - return true; - }, }, }; @@ -503,9 +461,6 @@ let eyewear = { text: t('eyewearSpecialSummerRogueText'), notes: t('eyewearSpecialSummerRogueNotes'), value: 20, - canBuy: () => { - return true; - }, }, summerWarrior: { event: EVENTS.summer, @@ -513,9 +468,6 @@ let eyewear = { text: t('eyewearSpecialSummerWarriorText'), notes: t('eyewearSpecialSummerWarriorNotes'), value: 20, - canBuy: () => { - return true; - }, }, blackTopFrame: { gearSet: 'glasses', @@ -650,9 +602,6 @@ let head = { notes: t('headSpecialSummerRogueNotes', { per: 9 }), value: 60, per: 9, - canBuy: () => { - return true; - }, }, summerWarrior: { event: EVENTS.summer, @@ -661,9 +610,6 @@ let head = { notes: t('headSpecialSummerWarriorNotes', { str: 9 }), value: 60, str: 9, - canBuy: () => { - return true; - }, }, summerMage: { event: EVENTS.summer, @@ -672,9 +618,6 @@ let head = { notes: t('headSpecialSummerMageNotes', { per: 7 }), value: 60, per: 7, - canBuy: () => { - return true; - }, }, summerHealer: { event: EVENTS.summer, @@ -683,9 +626,6 @@ let head = { notes: t('headSpecialSummerHealerNotes', { int: 7 }), value: 60, int: 7, - canBuy: () => { - return true; - }, }, fallRogue: { event: EVENTS.fall, @@ -796,9 +736,6 @@ let head = { notes: t('headSpecialSummer2015RogueNotes', { per: 9 }), value: 60, per: 9, - canBuy: () => { - return true; - }, }, summer2015Warrior: { event: EVENTS.summer2015, @@ -807,9 +744,6 @@ let head = { notes: t('headSpecialSummer2015WarriorNotes', { str: 9 }), value: 60, str: 9, - canBuy: () => { - return true; - }, }, summer2015Mage: { event: EVENTS.summer2015, @@ -818,9 +752,6 @@ let head = { notes: t('headSpecialSummer2015MageNotes', { per: 7 }), value: 60, per: 7, - canBuy: () => { - return true; - }, }, summer2015Healer: { event: EVENTS.summer2015, @@ -829,9 +760,6 @@ let head = { notes: t('headSpecialSummer2015HealerNotes', { int: 7 }), value: 60, int: 7, - canBuy: () => { - return true; - }, }, fall2015Rogue: { event: EVENTS.fall2015, @@ -1216,9 +1144,6 @@ let shield = { notes: t('shieldSpecialSummerRogueNotes', { str: 8 }), value: 80, str: 8, - canBuy: () => { - return true; - }, }, summerWarrior: { event: EVENTS.summer, @@ -1227,9 +1152,6 @@ let shield = { notes: t('shieldSpecialSummerWarriorNotes', { con: 7 }), value: 70, con: 7, - canBuy: () => { - return true; - }, }, summerHealer: { event: EVENTS.summer, @@ -1238,9 +1160,6 @@ let shield = { notes: t('shieldSpecialSummerHealerNotes', { con: 9 }), value: 70, con: 9, - canBuy: () => { - return true; - }, }, fallRogue: { event: EVENTS.fall, @@ -1321,9 +1240,6 @@ let shield = { notes: t('shieldSpecialSummer2015RogueNotes', { str: 8 }), value: 80, str: 8, - canBuy: () => { - return true; - }, }, summer2015Warrior: { event: EVENTS.summer2015, @@ -1332,9 +1248,6 @@ let shield = { notes: t('shieldSpecialSummer2015WarriorNotes', { con: 7 }), value: 70, con: 7, - canBuy: () => { - return true; - }, }, summer2015Healer: { event: EVENTS.summer2015, @@ -1343,9 +1256,6 @@ let shield = { notes: t('shieldSpecialSummer2015HealerNotes', { con: 9 }), value: 70, con: 9, - canBuy: () => { - return true; - }, }, fall2015Rogue: { event: EVENTS.fall2015, @@ -1534,9 +1444,6 @@ let weapon = { notes: t('weaponSpecialSummerRogueNotes', { str: 8 }), value: 80, str: 8, - canBuy: () => { - return true; - }, }, summerWarrior: { event: EVENTS.summer, @@ -1545,9 +1452,6 @@ let weapon = { notes: t('weaponSpecialSummerWarriorNotes', { str: 15 }), value: 90, str: 15, - canBuy: () => { - return true; - }, }, summerMage: { event: EVENTS.summer, @@ -1558,9 +1462,6 @@ let weapon = { value: 160, int: 15, per: 7, - canBuy: () => { - return true; - }, }, summerHealer: { event: EVENTS.summer, @@ -1569,9 +1470,6 @@ let weapon = { notes: t('weaponSpecialSummerHealerNotes', { int: 9 }), value: 90, int: 9, - canBuy: () => { - return true; - }, }, fallRogue: { event: EVENTS.fall, @@ -1682,9 +1580,6 @@ let weapon = { notes: t('weaponSpecialSummer2015RogueNotes', { str: 8 }), value: 80, str: 8, - canBuy: () => { - return true; - }, }, summer2015Warrior: { event: EVENTS.summer2015, @@ -1693,9 +1588,6 @@ let weapon = { notes: t('weaponSpecialSummer2015WarriorNotes', { str: 15 }), value: 90, str: 15, - canBuy: () => { - return true; - }, }, summer2015Mage: { event: EVENTS.summer2015, @@ -1706,9 +1598,6 @@ let weapon = { value: 160, int: 15, per: 7, - canBuy: () => { - return true; - }, }, summer2015Healer: { event: EVENTS.summer2015, @@ -1717,9 +1606,6 @@ let weapon = { notes: t('weaponSpecialSummer2015HealerNotes', { int: 9 }), value: 90, int: 9, - canBuy: () => { - return true; - }, }, fall2015Rogue: { event: EVENTS.fall2015, diff --git a/common/script/content/index.js b/common/script/content/index.js index c9c9c321e7..de6ec06375 100644 --- a/common/script/content/index.js +++ b/common/script/content/index.js @@ -441,6 +441,7 @@ api.specialPets = { 'Turkey-Gilded': 'gildedTurkey', 'MagicalBee-Base': 'magicalBee', 'Lion-Veteran': 'veteranLion', + 'Gryphon-RoyalPurple': 'royalPurpleGryphon', }; api.specialMounts = { diff --git a/common/script/content/mystery-sets.js b/common/script/content/mystery-sets.js index ea1423e464..254179da63 100644 --- a/common/script/content/mystery-sets.js +++ b/common/script/content/mystery-sets.js @@ -118,6 +118,10 @@ let mysterySets = { start: '2016-06-23', end: '2016-07-02', }, + 201607: { + start: '2016-07-26', + end: '2016-08-02', + }, 301404: { start: '3014-03-24', end: '3014-04-02', diff --git a/common/script/index.js b/common/script/index.js index 112c06a597..8f32dcb456 100644 --- a/common/script/index.js +++ b/common/script/index.js @@ -94,6 +94,9 @@ api.count = count; import statsComputed from './libs/statsComputed'; api.statsComputed = statsComputed; +import shops from './libs/shops'; +api.shops = shops; + import autoAllocate from './fns/autoAllocate'; import crit from './fns/crit'; import handleTwoHanded from './fns/handleTwoHanded'; diff --git a/common/script/libs/shops.js b/common/script/libs/shops.js new file mode 100644 index 0000000000..7a5f2b8e36 --- /dev/null +++ b/common/script/libs/shops.js @@ -0,0 +1,235 @@ +import _ from 'lodash'; +import content from '../content/index'; +import i18n from '../i18n'; + +let shops = {}; + +function lockQuest (quest, user) { + if (quest.lvl && user.stats.lvl < quest.lvl) return true; + if (user.achievements.quests) return quest.previous && !user.achievements.quests[quest.previous]; + return quest.previous; +} + +shops.getMarketCategories = function getMarket (user, language) { + let categories = []; + let eggsCategory = { + identifier: 'eggs', + text: i18n.t('eggs', language), + notes: i18n.t('dropsExplanation', language), + }; + + eggsCategory.items = _(content.questEggs) + .values() + .filter(egg => egg.canBuy(user)) + .concat(_.values(content.dropEggs)) + .map(egg => { + return { + key: egg.key, + text: i18n.t('egg', {eggType: egg.text()}, language), + notes: egg.notes(language), + value: egg.value, + class: `Pet_Egg_${egg.key}`, + locked: false, + currency: 'gems', + purchaseType: 'eggs', + }; + }).sortBy('key').value(); + categories.push(eggsCategory); + + let hatchingPotionsCategory = { + identifier: 'hatchingPotions', + text: i18n.t('hatchingPotions', language), + notes: i18n.t('dropsExplanation', language), + }; + hatchingPotionsCategory.items = _(content.hatchingPotions) + .values() + .filter(hp => !hp.limited) + .map(hatchingPotion => { + return { + key: hatchingPotion.key, + text: hatchingPotion.text(language), + notes: hatchingPotion.notes(language), + class: `Pet_HatchingPotion_${hatchingPotion.key}`, + value: hatchingPotion.value, + locked: false, + currency: 'gems', + purchaseType: 'hatchingPotions', + }; + }).sortBy('key').value(); + categories.push(hatchingPotionsCategory); + + let foodCategory = { + identifier: 'food', + text: i18n.t('food', language), + notes: i18n.t('dropsExplanation', language), + }; + foodCategory.items = _(content.food) + .values() + .filter(food => food.canDrop || food.key === 'Saddle') + .map(foodItem => { + return { + key: foodItem.key, + text: foodItem.text(language), + notes: foodItem.notes(language), + class: `Pet_Food_${foodItem.key}`, + value: foodItem.value, + locked: false, + currency: 'gems', + purchaseType: 'food', + }; + }).sortBy('key').value(); + categories.push(foodCategory); + + return categories; +}; + +shops.getQuestShopCategories = function getQuestShopCategories (user, language) { + let categories = []; + + _.each(content.userCanOwnQuestCategories, type => { + let category = { + identifier: type, + text: i18n.t(`${type}Quests`, language), + }; + + category.items = _(content.questsByLevel) + .filter(quest => quest.canBuy(user) && quest.category === type) + .map(quest => { + let locked = lockQuest(quest, user); + return { + key: quest.key, + text: quest.text(language), + notes: quest.notes(language), + value: quest.goldValue ? quest.goldValue : quest.value, + currency: quest.goldValue ? 'gold' : 'gems', + locked, + unlockCondition: quest.unlockCondition, + drop: quest.drop, + boss: quest.boss, + collect: quest.collect, + lvl: quest.lvl, + class: locked ? `inventory_quest_scroll_${quest.key}_locked` : `inventory_quest_scroll_${quest.key}`, + purchaseType: 'quests', + }; + }).value(); + + categories.push(category); + }); + + return categories; +}; + +shops.getTimeTravelersCategories = function getTimeTravelersCategories (user, language) { + let categories = []; + let stable = {pets: 'Pet-', mounts: 'Mount_Head_'}; + for (let type in stable) { + if (stable.hasOwnProperty(type)) { + let category = { + identifier: type, + text: i18n.t(type, language), + items: [], + }; + + for (let key in content.timeTravelStable[type]) { + if (content.timeTravelStable[type].hasOwnProperty(key)) { + if (!user.items[type][key]) { + let item = { + key, + text: content.timeTravelStable[type][key](language), + class: stable[type] + key, + type, + purchaseType: type, + value: 1, + notes: '', + locked: false, + currency: 'hourglasses', + }; + category.items.push(item); + } + } + } + if (category.items.length > 0) { + categories.push(category); + } + } + } + + let sets = content.timeTravelerStore(user.items.gear.owned); + for (let setKey in sets) { + if (sets.hasOwnProperty(setKey)) { + let set = sets[setKey]; + let category = { + identifier: set.key, + text: set.text(language), + purchaseAll: true, + }; + + category.items = _.map(set.items, item => { + return { + key: item.key, + text: item.text(language), + notes: item.notes(language), + type: item.type, + purchaseType: 'gear', + value: 1, + locked: false, + currency: 'hourglasses', + class: `shop_${item.key}`, + }; + }); + if (category.items.length > 0) { + categories.push(category); + } + } + } + + return categories; +}; + +// To switch seasons/available inventory, edit the availableSets object to whatever should be sold. +// let availableSets = { +// setKey: i18n.t('setTranslationString', language), +// }; +shops.getSeasonalShopCategories = function getSeasonalShopCategories (user, language) { + let availableSets = { + }; + + let categories = []; + + let flatGearArray = _.toArray(content.gear.flat); + + for (let key in availableSets) { + if (availableSets.hasOwnProperty(key)) { + let category = { + identifier: key, + text: availableSets[key], + }; + + category.items = _(flatGearArray).filter((gear) => { + if (gear.index !== key) { + return false; + } + return user.items.gear.owned[gear.key] !== true; + }).where({index: key}).map(gear => { + return { + key: gear.key, + text: gear.text(language), + notes: gear.notes(language), + value: 1, + type: gear.type, + specialClass: gear.specialClass, + locked: false, + currency: 'gems', + purchaseType: 'gear', + }; + }).value(); + if (category.items.length > 0) { + categories.push(category); + } + } + } + + return categories; +}; + +module.exports = shops; diff --git a/config.json.example b/config.json.example index a6b4fd0cf1..025f46f482 100644 --- a/config.json.example +++ b/config.json.example @@ -65,7 +65,8 @@ "LOGGLY_ACCOUNT": "account", "PUSH_CONFIGS": { "GCM_SERVER_API_KEY": "", - "APN_ENABLED": "true" + "APN_ENABLED": "true", + "FCM_SERVER_API_KEY": "" }, "PUSHER": { "ENABLED": "false", diff --git a/migrations/20160731_naming_day.js b/migrations/20160731_naming_day.js new file mode 100644 index 0000000000..601798d14c --- /dev/null +++ b/migrations/20160731_naming_day.js @@ -0,0 +1,82 @@ +var migrationName = '20160731_naming_day.js'; +var authorName = 'Sabe'; // in case script author needs to know when their ... +var authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; //... own data is done + +/* + * Award Royal Purple Gryphon pet to Royal Purple Gryphon mount owners, mount to everyone else + */ + +var mongo = require('mongoskin'); + +var connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE + +var dbUsers = mongo.db(connectionString).collection('users'); + +// specify a query to limit the affected users (empty for all users): +var query = { + 'migration':{$ne:migrationName}, + 'auth.timestamps.loggedin':{$gt:new Date('2016-07-30')} // Extend timeframe each run of migration +}; + +// specify fields we are interested in to limit retrieved data (empty if we're not reading data): +var fields = { + 'items.mounts': 1 +}; + +console.warn('Updating users...'); +var progressCount = 1000; +var count = 0; +dbUsers.findEach(query, fields, {batchSize:250}, function(err, user) { + if (err) { return exiting(1, 'ERROR! ' + err); } + if (!user) { + console.warn('All appropriate users found and modified.'); + setTimeout(displayData, 300000); + return; + } + count++; + + // specify user data to change: + var set = {}; + var inc = {}; + inc = { + 'achievements.habiticaDays': 1, + 'items.food.Cake_Skeleton': 1, + 'items.food.Cake_Base': 1, + 'items.food.Cake_CottonCandyBlue': 1, + 'items.food.Cake_CottonCandyPink': 1, + 'items.food.Cake_Shade': 1, + 'items.food.Cake_White': 1, + 'items.food.Cake_Golden': 1, + 'items.food.Cake_Zombie': 1, + 'items.food.Cake_Desert': 1, + 'items.food.Cake_Red': 1 + }; + if (user.items.mounts['Gryphon-RoyalPurple']) { + set = {'migration':migrationName, 'items.pets.Gryphon-RoyalPurple':5}; + } else { + set = {'migration':migrationName, 'items.mounts.Gryphon-RoyalPurple':true}; + } + + dbUsers.update({_id:user._id}, {$set:set, $inc:inc}); + + if (count%progressCount == 0) console.warn(count + ' ' + user._id); + if (user._id == authorUuid) console.warn(authorName + ' processed'); +}); + + +function displayData() { + console.warn('\n' + count + ' users processed\n'); + return exiting(0); +} + + +function exiting(code, msg) { + code = code || 0; // 0 = success + if (code && !msg) { msg = 'ERROR!'; } + if (msg) { + if (code) { console.error(msg); } + else { console.log( msg); } + } + process.exit(code); +} + diff --git a/migrations/20160731_takeThis.js b/migrations/20160731_takeThis.js new file mode 100644 index 0000000000..b08700a4bd --- /dev/null +++ b/migrations/20160731_takeThis.js @@ -0,0 +1,71 @@ +var migrationName = '20160731_takeThis.js'; +var authorName = 'Sabe'; // in case script author needs to know when their ... +var authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; //... own data is done + +/* + * Award Take This Sword to Take This challenge participants who already own the Shield + * and Take This Shield to the rest of the list + */ + +var mongo = require('mongoskin'); + +var connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE + +var dbUsers = mongo.db(connectionString).collection('users'); + +// specify a query to limit the affected users (empty for all users): +var query = { + 'migration':{$ne:migrationName}, + 'auth.timestamps.loggedin':{$gt:new Date('2016-07-30')}, // Extend timeframe each run of migration + 'challenges':{$in:['da8859b2-5c6e-4aa5-b8b2-8db93d5de9fc']} +}; + +// specify fields we are interested in to limit retrieved data (empty if we're not reading data): +var fields = { + 'items.gear.owned': 1 +}; + +console.warn('Updating users...'); +var progressCount = 1000; +var count = 0; +dbUsers.findEach(query, fields, {batchSize:250}, function(err, user) { + if (err) { return exiting(1, 'ERROR! ' + err); } + if (!user) { + console.warn('All appropriate users found and modified.'); + setTimeout(displayData, 300000); + return; + } + count++; + + // specify user data to change: + var set = {}; + + if (typeof user.items.gear.owned.shield_special_takeThis !== 'undefined') { + set = {'migration':migrationName, 'items.gear.owned.weapon_special_takeThis':false}; + } else { + set = {'migration':migrationName, 'items.gear.owned.shield_special_takeThis':false}; + } + + dbUsers.update({_id:user._id}, {$set:set}); + + if (count%progressCount == 0) console.warn(count + ' ' + user._id); + if (user._id == authorUuid) console.warn(authorName + ' processed'); +}); + + +function displayData() { + console.warn('\n' + count + ' users processed\n'); + return exiting(0); +} + + +function exiting(code, msg) { + code = code || 0; // 0 = success + if (code && !msg) { msg = 'ERROR!'; } + if (msg) { + if (code) { console.error(msg); } + else { console.log( msg); } + } + process.exit(code); +} + diff --git a/migrations/mystery_items.js b/migrations/mystery_items.js index 3e6a04a37f..e0e9ad22d9 100644 --- a/migrations/mystery_items.js +++ b/migrations/mystery_items.js @@ -2,7 +2,7 @@ var _id = ''; var update = { $addToSet: { 'purchased.plan.mysteryItems':{ - $each:['head_mystery_201606','armor_mystery_201606'] + $each:['head_mystery_201607','armor_mystery_201607'] } } }; diff --git a/migrations/new_stuff.js b/migrations/new_stuff.js index 9d8b796c69..518df71056 100644 --- a/migrations/new_stuff.js +++ b/migrations/new_stuff.js @@ -6,23 +6,19 @@ var authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; //... own data is done * set the newStuff flag in all user accounts so they see a Bailey message */ -var dbserver = 'localhost:27017'; // FOR TEST DATABASE -// var dbserver = 'username:password@ds031379-a0.mongolab.com:31379'; // FOR PRODUCTION DATABASE -var dbname = 'habitrpg'; - var mongo = require('mongoskin'); -var _ = require('lodash'); -var dbUsers = mongo.db(dbserver + '/' + dbname + '?auto_reconnect').collection('users'); +var connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE + +var dbUsers = mongo.db(connectionString).collection('users'); // specify a query to limit the affected users (empty for all users): var query = { - 'flags.newStuff':false + 'flags.newStuff':{$ne:true} }; // specify fields we are interested in to limit retrieved data (empty if we're not reading data): var fields = { - 'flags.newStuff':1 }; console.warn('Updating users...'); @@ -32,12 +28,13 @@ dbUsers.findEach(query, fields, {batchSize:250}, function(err, user) { if (err) { return exiting(1, 'ERROR! ' + err); } if (!user) { console.warn('All appropriate users found and modified.'); - return displayData(); + setTimeout(displayData, 300000); + return; } count++; // specify user data to change: - var set = {'migration':migrationName, 'flags.newStuff':true}; + var set = {'flags.newStuff':true}; dbUsers.update({_id:user._id}, {$set:set}); diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index f17fe0a116..b83662ba63 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -1,6 +1,6 @@ { "name": "habitica", - "version": "3.23.1", + "version": "3.28.0", "dependencies": { "abbrev": { "version": "1.0.9", @@ -5949,11 +5949,6 @@ } } }, - "kerberos": { - "version": "0.0.3", - "from": "kerberos@0.0.3", - "resolved": "https://registry.npmjs.org/kerberos/-/kerberos-0.0.3.tgz" - }, "kew": { "version": "0.7.0", "from": "kew@>=0.7.0 <0.8.0", diff --git a/package.json b/package.json index 8e20fc7606..17a8ed389e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "habitica", "description": "A habit tracker app which treats your goals like a Role Playing Game.", - "version": "3.23.1", + "version": "3.28.0", "main": "./website/server/index.js", "dependencies": { "accepts": "^1.3.2", @@ -68,6 +68,7 @@ "nconf": "~0.8.2", "newrelic": "^1.27.2", "nib": "^1.1.0", + "node-gcm": "^0.14.4", "nodemailer": "^2.3.2", "object-path": "^0.9.2", "pageres": "^4.1.1", @@ -102,13 +103,11 @@ "scripts": { "lint": "eslint .", "test": "npm run lint && gulp test", - "test:api-v2:unit": "mocha test/server_side", - "test:api-v2:integration": "mocha test/api/v2 --recursive", "test:api-v3": "gulp test:api-v3", "test:api-v3:unit": "gulp test:api-v3:unit", "test:api-v3:integration": "gulp test:api-v3:integration", - "test:api-v3:integration:separate-server": "gulp test:api-v3:integration:separate-server", - "test:api-legacy": "istanbul cover -i \"website/server/**\" --dir coverage/api ./node_modules/mocha/bin/_mocha test/api-legacy", + "test:api-v3:integration:separate-server": "NODE_ENV=test gulp test:api-v3:integration:separate-server", + "test:sanity": "mocha test/sanity --recursive", "test:common": "mocha test/common --recursive", "test:content": "mocha test/content --recursive", "test:karma": "karma start --single-run", @@ -147,7 +146,7 @@ "lcov-result-merger": "^1.0.2", "mocha": "^2.3.3", "mongodb": "^2.0.46", - "mongoskin": "~0.6.1", + "mongoskin": "~2.1.0", "nock": "^2.17.0", "phantomjs": "^1.9", "protractor": "^3.1.1", diff --git a/tasks/gulp-console.js b/tasks/gulp-console.js index 026d646cee..43c42abc8e 100644 --- a/tasks/gulp-console.js +++ b/tasks/gulp-console.js @@ -1,6 +1,6 @@ import mongoose from 'mongoose'; import autoinc from 'mongoose-id-autoinc'; -import logger from '../website/server/libs/api-v3/logger'; +import logger from '../website/server/libs/logger'; import nconf from 'nconf'; import repl from 'repl'; import gulp from 'gulp'; diff --git a/tasks/gulp-tests.js b/tasks/gulp-tests.js index 7db299a5c4..e7dd6e01f0 100644 --- a/tasks/gulp-tests.js +++ b/tasks/gulp-tests.js @@ -21,15 +21,12 @@ let server; const TEST_DB_URI = nconf.get('TEST_DB_URI'); -const API_V2_TEST_COMMAND = 'npm run test:api-v2:integration'; const API_V3_TEST_COMMAND = 'npm run test:api-v3'; -const LEGACY_API_TEST_COMMAND = 'npm run test:api-legacy'; +const SANITY_TEST_COMMAND = 'npm run test:sanity'; const COMMON_TEST_COMMAND = 'npm run test:common'; const CONTENT_TEST_COMMAND = 'npm run test:content'; const CONTENT_OPTIONS = {maxBuffer: 1024 * 500}; const KARMA_TEST_COMMAND = 'npm run test:karma'; -const SERVER_SIDE_TEST_COMMAND = 'npm run test:api-v2:unit'; -const ISTANBUL_TEST_COMMAND = 'npm run test:api-legacy'; /* Helper methods for reporting test summary */ let testResults = []; @@ -89,6 +86,16 @@ gulp.task('test:prepare', [ 'test:prepare:webdriver' ]); +gulp.task('test:sanity', (cb) => { + let runner = exec( + testBin(SANITY_TEST_COMMAND), + (err, stdout, stderr) => { + cb(err); + } + ); + pipe(runner); +}); + gulp.task('test:common', ['test:prepare:build'], (cb) => { let runner = exec( testBin(COMMON_TEST_COMMAND), @@ -185,43 +192,6 @@ gulp.task('test:server_side:safe', ['test:prepare:build'], (cb) => { pipe(runner); }); -gulp.task('test:api-legacy', ['test:prepare:mongo'], (cb) => { - let runner = exec( - testBin(ISTANBUL_TEST_COMMAND), - (err, stdout, stderr) => { - cb(err); - } - ); - pipe(runner); -}); - -gulp.task('test:api-legacy:safe', ['test:prepare:mongo'], (cb) => { - let runner = exec( - testBin(ISTANBUL_TEST_COMMAND), - (err, stdout, stderr) => { - testResults.push({ - suite: 'API (legacy) Specs', - pass: testCount(stdout, /(\d+) passing/), - fail: testCount(stdout, /(\d+) failing/), - pend: testCount(stdout, /(\d+) pending/) - }); - cb(); - } - ); - pipe(runner); -}); - -gulp.task('test:api-legacy:clean', (cb) => { - pipe(exec(testBin(LEGACY_API_TEST_COMMAND), () => cb())); -}); - -gulp.task('test:api-legacy:watch', [ - 'test:prepare:mongo', - 'test:api-legacy:clean' -], () => { - gulp.watch(['website/server/**', 'test/api-legacy/**'], ['test:api-legacy:clean']); -}); - gulp.task('test:karma', ['test:prepare:build'], (cb) => { let runner = exec( testBin(KARMA_TEST_COMMAND), @@ -309,46 +279,6 @@ gulp.task('test:e2e:safe', ['test:prepare', 'test:prepare:server'], (cb) => { }); }); -/*gulp.task('test:api-v2', ['test:prepare:server'], (done) => { - process.env.API_VERSION = 'v2'; - awaitPort(TEST_SERVER_PORT).then(() => { - runMochaTests('./test/api/v2/**//*.js', server, done) - }); -}); - -gulp.task('test:api-v2:watch', ['test:prepare:server'], () => { - process.env.RUN_INTEGRATION_TEST_FOREVER = true; - gulp.watch(['website/server/**', 'test/api/v2/**'], ['test:api-v2']); -}); - -gulp.task('test:api-v2:safe', ['test:prepare:server'], (done) => { - awaitPort(TEST_SERVER_PORT).then(() => { - let runner = exec( - testBin(API_V2_TEST_COMMAND), - (err, stdout, stderr) => { - testResults.push({ - suite: 'API V2 Specs\t', - pass: testCount(stdout, /(\d+) passing/), - fail: testCount(stderr, /(\d+) failing/), - pend: testCount(stdout, /(\d+) pending/) - }); - done(); - } - ); - pipe(runner); - }); -});*/ - -gulp.task('test:api-v2:integration', (done) => { - let runner = exec( - testBin('mocha test/api/v2 --recursive'), - {maxBuffer: 500*1024}, - (err, stdout, stderr) => done(err) - ) - - pipe(runner); -}); - gulp.task('test:api-v3:unit', (done) => { let runner = exec( testBin('mocha test/api/v3/unit --recursive'), @@ -359,7 +289,7 @@ gulp.task('test:api-v3:unit', (done) => { }); gulp.task('test:api-v3:unit:watch', () => { - gulp.watch(['website/server/libs/api-v3/*', 'test/api/v3/unit/**/*', 'website/server/controllers/**/*'], ['test:api-v3:unit']); + gulp.watch(['website/server/libs/*', 'test/api/v3/unit/**/*', 'website/server/controllers/**/*'], ['test:api-v3:unit']); }); gulp.task('test:api-v3:integration', (done) => { @@ -373,7 +303,7 @@ gulp.task('test:api-v3:integration', (done) => { }); gulp.task('test:api-v3:integration:watch', () => { - gulp.watch(['website/server/controllers/api-v3/**/*', 'common/script/ops/*', 'website/server/libs/api-v3/*.js', + gulp.watch(['website/server/controllers/api-v3/**/*', 'common/script/ops/*', 'website/server/libs/*.js', 'test/api/v3/integration/**/*'], ['test:api-v3:integration']); }); @@ -389,11 +319,11 @@ gulp.task('test:api-v3:integration:separate-server', (done) => { gulp.task('test', (done) => { runSequence( + 'test:sanity', 'test:common', 'test:karma', 'test:api-v3:unit', 'test:api-v3:integration', - 'test:api-v2:integration', done ); }); @@ -404,100 +334,4 @@ gulp.task('test:api-v3', (done) => { 'test:api-v3:integration', done ); -}); - -// Old tests tasks -/* -gulp.task('test:api-v3', ['test:api-v3:unit', 'test:api-v3:integration']); - -gulp.task('test:api-v3:watch', ['test:api-v3:unit:watch', 'test:api-v3:integration:watch']); - -gulp.task('test:api-v3:unit', (done) => {*/ -// runMochaTests('./test/api/v3/unit/**/*.js', null, done) -/*}); - -gulp.task('test:api-v3:unit:watch', () => { - gulp.watch(['website/server/**', 'test/api/v3/unit/**'], ['test:api-v3:unit']); -}); - -gulp.task('test:api-v3:integration', ['test:prepare:server'], (done) => { - process.env.API_VERSION = 'v3'; - awaitPort(TEST_SERVER_PORT).then(() => {*/ -// runMochaTests('./test/api/v3/integration/**/*.js', server, done) -/* }); -}); - -gulp.task('test:api-v3:integration:watch', ['test:prepare:server'], () => { - process.env.RUN_INTEGRATION_TEST_FOREVER = true; - gulp.watch(['website/server/**', 'test/api/v3/integration/**'], ['test:api-v3:integration']); -}); - -gulp.task('test:api-v3:safe', ['test:prepare:server'], (done) => { - awaitPort(TEST_SERVER_PORT).then(() => { - let runner = exec( - testBin(API_V3_TEST_COMMAND), - (err, stdout, stderr) => { - testResults.push({ - suite: 'API V3 Specs\t', - pass: testCount(stdout, /(\d+) passing/), - fail: testCount(stdout, /(\d+) failing/), - pend: testCount(stdout, /(\d+) pending/) - }); - done(); - } - ); - pipe(runner); - }); -}); - -gulp.task('test:all', (done) => { - runSequence( - //'test:e2e:safe', - //'test:common:safe', - //'test:content:safe', - // 'test:server_side:safe', - //'test:karma:safe', - //'test:api-legacy:safe', - //'test:api-v2:safe', - 'test:api-v3:safe', - done); -}); - -gulp.task('test', ['test:all'], () => { - let totals = [0,0,0]; - - console.log('\n\x1b[36m\x1b[4mHabitica Test Summary\x1b[0m\n'); - testResults.forEach((s) => { - totals[0] = totals[0] + s.pass; - totals[1] = totals[1] + s.fail; - totals[2] = totals[2] + s.pend; - console.log( - `\x1b[33m\x1b[4m${s.suite}\x1b[0m\t`, - `\x1b[32mPassing: ${s.pass},\t`, - `\x1b[31mFailed: ${s.fail},\t`, - `\x1b[36mPending: ${s.pend}\t` - ); - - if (s.pass === 0) { - console.error('ERROR: Detected a test suite with 0 passing tests. Something may be wrong causing the build to error.'); - process.exit(1); - } - }); - - console.log( - '\n\x1b[33m\x1b[4mTotal:\x1b[0m\t\t\t', - `\x1b[32mPassing: ${totals[0]},\t`, - `\x1b[31mFailed: ${totals[1]},\t`, - `\x1b[36mPending: ${totals[2]}\t` - ); - - kill(server); - - if (totals[1] > 0) { - console.error('ERROR: There are failing tests!'); - process.exit(1); - } else { - console.log('\n\x1b[36mThanks for helping keep Habitica clean!\x1b[0m'); - process.exit(); - } -});*/ +}); \ No newline at end of file diff --git a/test/api-legacy/README.md b/test/api-legacy/README.md deleted file mode 100644 index 9157af554d..0000000000 --- a/test/api-legacy/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Legacy API Tests - -These tests have been deprecated. Any tests that you see in this folder should be converted to ES2015 and ported to the `/test/api` directory. - -Once all tests have been ported, this directory will be removed. diff --git a/test/api-legacy/api-helper.js b/test/api-legacy/api-helper.js deleted file mode 100644 index 1b994a80a8..0000000000 --- a/test/api-legacy/api-helper.js +++ /dev/null @@ -1,92 +0,0 @@ -require('babel-core/register'); -var path, superagentDefaults; - -superagentDefaults = require("superagent-defaults"); - -global.request = superagentDefaults(); - -global.mongoose = require("mongoose"); -var Bluebird = require('bluebird'); -mongoose.Promise = Bluebird; - -global.moment = require("moment"); - -global.async = require("async"); - -global._ = require("lodash"); - -global.shared = require("../../common"); - -global.User = require("../../website/server/models/user").model; - -global.chai = require("chai"); - -chai.use(require("sinon-chai")); - -global.expect = chai.expect; - -path = require("path"); - -global.conf = require("nconf"); - -conf.argv().env().file({ - file: path.join(__dirname, "../config.json") -}).defaults(); - -conf.set("PORT", "1337"); - -process.env.NODE_DB_URI = "mongodb://localhost/habitrpg_test_api_legacy"; - -global.baseURL = "http://localhost:" + conf.get("PORT") + "/api/v2"; - -global.user = void 0; - -global.expectCode = function(res, code) { - if (code === 200) { - expect(res.body.err).to.not.exist; - } - return expect(res.statusCode).to.equal(code); -}; - -global.registerNewUser = function(cb, main) { - var password, randomID, username; - if (main == null) { - main = true; - } - randomID = shared.uuid(); - if (main) { - username = password = randomID; - } - return request.post(baseURL + "/register").set("Accept", "application/json").set("X-API-User", null).set("X-API-Key", null).send({ - username: randomID, - password: randomID, - confirmPassword: randomID, - email: randomID + "@gmail.com" - }).end(function(err, res) { - var _id, apiToken; - if (!main) { - return cb(null, res.body); - } - _id = res.body._id; - apiToken = res.body.apiToken; - return User.findOne({ - _id: _id, - apiToken: apiToken - }, function(err, _user) { - expect(err).to.not.be.ok; - global.user = _user; - request.set("Accept", "application/json").set("X-API-User", _id).set("X-API-Key", apiToken); - return cb(null, res.body); - }); - }); -}; - -global.registerManyUsers = function(number, callback) { - return async.times(number, function(n, next) { - return registerNewUser(function(err, user) { - return next(err, user); - }, false); - }, function(err, users) { - return callback(err, users); - }); -}; diff --git a/test/api-legacy/challenges.js b/test/api-legacy/challenges.js deleted file mode 100644 index b09754bc5c..0000000000 --- a/test/api-legacy/challenges.js +++ /dev/null @@ -1,412 +0,0 @@ -var Challenge, Group, app; - -app = require("../../website/server/server"); - -Group = require("../../website/server/models/group").model; - -Challenge = require("../../website/server/models/challenge").model; - -describe("Challenges", function() { - var challenge, group, updateTodo; - challenge = void 0; - updateTodo = void 0; - group = void 0; - beforeEach(function(done) { - return async.waterfall([ - function(cb) { - return registerNewUser(cb, true); - }, function(user, cb) { - return request.post(baseURL + "/groups").send({ - name: "TestGroup", - type: "party" - }).end(function(err, res) { - expectCode(res, 200); - group = res.body; - expect(group.members.length).to.equal(1); - expect(group.leader).to.equal(user._id); - return cb(); - }); - }, function(cb) { - return request.post(baseURL + "/challenges").send({ - group: group._id, - dailys: [ - { - type: "daily", - text: "Challenge Daily" - } - ], - todos: [ - { - type: "todo", - text: "Challenge Todo 1", - notes: "Challenge Notes" - } - ], - rewards: [], - habits: [] - }).end(function(err, res) { - challenge = res.body; - return done(); - }); - } - ]); - }); - describe('POST /challenge', function() { - return it("Creates a challenge", function(done) { - return request.post(baseURL + "/challenges").send({ - group: group._id, - dailys: [ - { - type: "daily", - text: "Challenge Daily" - } - ], - todos: [ - { - type: "todo", - text: "Challenge Todo 1", - notes: "Challenge Notes" - }, { - type: "todo", - text: "Challenge Todo 2", - notes: "Challenge Notes" - } - ], - rewards: [], - habits: [], - official: true - }).end(function(err, res) { - expectCode(res, 200); - return async.parallel([ - function(cb) { - return User.findById(user._id, cb); - }, function(cb) { - return Challenge.findById(res.body._id, cb); - } - ], function(err, results) { - var user; - user = results[0]; - challenge = results[1]; - expect(user.dailys[user.dailys.length - 1].text).to.equal("Challenge Daily"); - expect(challenge.official).to.equal(false); - return done(); - }); - }); - }); - }); - describe('POST /challenge/:cid', function() { - it("updates the notes on user's version of a challenge task's note without updating the challenge", function(done) { - updateTodo = challenge.todos[0]; - updateTodo.notes = "User overriden notes"; - return async.waterfall([ - function(cb) { - return request.put(baseURL + "/user/tasks/" + updateTodo.id).send(updateTodo).end(function(err, res) { - return cb(); - }); - }, function(cb) { - return Challenge.findById(challenge._id, cb); - }, function(chal, cb) { - expect(chal.todos[0].notes).to.eql("Challenge Notes"); - return cb(); - }, function(cb) { - return request.get(baseURL + "/user/tasks/" + updateTodo.id).end(function(err, res) { - expect(res.body.notes).to.eql("User overriden notes"); - return done(); - }); - } - ]); - }); - it("changes user's copy of challenge tasks when the challenge is updated", function(done) { - challenge.dailys[0].text = "Updated Daily"; - return request.post(baseURL + "/challenges/" + challenge._id).send(challenge).end(function(err, res) { - challenge = res.body; - expect(challenge.dailys[0].text).to.equal("Updated Daily"); - return User.findById(user._id, function(err, _user) { - expectCode(res, 200); - expect(_user.dailys[_user.dailys.length - 1].text).to.equal("Updated Daily"); - return done(); - }); - }); - }); - it("does not changes user's notes on tasks when challenge task notes are updated", function(done) { - challenge.todos[0].notes = "Challenge Updated Todo Notes"; - return request.post(baseURL + "/challenges/" + challenge._id).send(challenge).end(function(err, res) { - challenge = res.body; - expect(challenge.todos[0].notes).to.equal("Challenge Updated Todo Notes"); - return User.findById(user._id, function(err, _user) { - expectCode(res, 200); - expect(_user.todos[_user.todos.length - 1].notes).to.equal("Challenge Notes"); - return done(); - }); - }); - }); - return it("shows user notes on challenge page", function(done) { - updateTodo = challenge.todos[0]; - updateTodo.notes = "User overriden notes"; - return async.waterfall([ - function(cb) { - return request.put(baseURL + "/user/tasks/" + updateTodo.id).send(updateTodo).end(function(err, res) { - return cb(); - }); - }, function(cb) { - return Challenge.findById(challenge._id, cb); - }, function(chal, cb) { - expect(chal.todos[0].notes).to.eql("Challenge Notes"); - return cb(); - }, function(cb) { - return request.get(baseURL + "/challenges/" + challenge._id + "/member/" + user._id).end(function(err, res) { - expect(res.body.todos[res.body.todos.length - 1].notes).to.equal("User overriden notes"); - return done(); - }); - } - ]); - }); - }); - it("Complete To-Dos", function(done) { - return User.findById(user._id, function(err, _user) { - var numTasks, u; - u = _user; - numTasks = _.size(u.todos); - return request.post(baseURL + "/user/tasks/" + u.todos[0].id + "/up").end(function(err, res) { - return request.post(baseURL + "/user/tasks/clear-completed").end(function(err, res) { - expect(_.size(res.body)).to.equal(numTasks - 1); - return done(); - }); - }); - }); - }); - it("Challenge deleted, breaks task link", function(done) { - var itThis; - itThis = this; - return request.del(baseURL + "/challenges/" + challenge._id).end(function(err, res) { - return User.findById(user._id, function(err, user) { - var daily, len, unset; - len = user.dailys.length - 1; - daily = user.dailys[user.dailys.length - 1]; - expect(daily.challenge.broken).to.equal("CHALLENGE_DELETED"); - unset = { - $unset: {} - }; - unset["$unset"]["dailys." + len + ".challenge.broken"] = 1; - return User.findByIdAndUpdate(user._id, unset, { - "new": true - }, function(err, user) { - expect(err).to.not.exist; - expect(user.dailys[len].challenge.broken).to.not.exist; - return request.post(baseURL + "/user/tasks/" + daily.id + "/up").end(function(err, res) { - return setTimeout((function() { - return User.findById(user._id, function(err, user) { - expect(user.dailys[len].challenge.broken).to.equal("CHALLENGE_DELETED"); - return done(); - }); - }), 100); - }); - }); - }); - }); - }); - it("admin creates a challenge", function(done) { - return User.findByIdAndUpdate(user._id, { - $set: { - "contributor.admin": true - } - }, { - "new": true - }, function(err, _user) { - expect(err).to.not.exist; - return async.parallel([ - function(cb) { - return request.post(baseURL + "/challenges").send({ - group: group._id, - dailys: [], - todos: [], - rewards: [], - habits: [], - official: false - }).end(function(err, res) { - expect(res.body.official).to.equal(false); - return cb(); - }); - }, function(cb) { - return request.post(baseURL + "/challenges").send({ - group: group._id, - dailys: [], - todos: [], - rewards: [], - habits: [], - official: true - }).end(function(err, res) { - expect(res.body.official).to.equal(true); - return cb(); - }); - } - ], done); - }); - }); - it("User creates a non-tavern challenge with prize, deletes it, gets refund", function(done) { - return User.findByIdAndUpdate(user._id, { - $set: { - "balance": 8 - } - }, { - "new": true - }, function(err, user) { - expect(err).to.not.be.ok; - return request.post(baseURL + "/challenges").send({ - group: group._id, - dailys: [], - todos: [], - rewards: [], - habits: [], - prize: 10 - }).end(function(err, res) { - expect(res.body.prize).to.equal(10); - return async.parallel([ - function(cb) { - return User.findById(user._id, cb); - }, function(cb) { - return Challenge.findById(res.body._id, cb); - } - ], function(err, results) { - user = results[0]; - challenge = results[1]; - expect(user.balance).to.equal(5.5); - return request.del(baseURL + "/challenges/" + challenge._id).end(function(err, res) { - return User.findById(user._id, function(err, _user) { - expect(_user.balance).to.equal(8); - return done(); - }); - }); - }); - }); - }); - }); - it("User creates a tavern challenge with prize, deletes it, and does not get refund", function(done) { - return User.findByIdAndUpdate(user._id, { - $set: { - "balance": 8 - } - }, { - "new": true - }, function(err, user) { - expect(err).to.not.be.ok; - return request.post(baseURL + "/challenges").send({ - group: 'habitrpg', - dailys: [], - todos: [], - rewards: [], - habits: [], - prize: 10 - }).end(function(err, res) { - expect(res.body.prize).to.equal(10); - return async.parallel([ - function(cb) { - return User.findById(user._id, cb); - }, function(cb) { - return Challenge.findById(res.body._id, cb); - } - ], function(err, results) { - user = results[0]; - challenge = results[1]; - expect(user.balance).to.equal(5.5); - return request.del(baseURL + "/challenges/" + challenge._id).end(function(err, res) { - return User.findById(user._id, function(err, _user) { - expect(_user.balance).to.equal(5.5); - return done(); - }); - }); - }); - }); - }); - }); - return describe("non-owner permissions", function() { - challenge = void 0; - beforeEach(function(done) { - return async.waterfall([ - function(cb) { - return request.post(baseURL + "/challenges").send({ - group: group._id, - name: 'challenge name', - dailys: [ - { - type: "daily", - text: "Challenge Daily" - } - ] - }).end(function(err, res) { - challenge = res.body; - return cb(); - }); - }, function(cb) { - return registerNewUser(done, true); - } - ]); - }); - context("non-owner", function() { - it('can not edit challenge', function(done) { - challenge.name = 'foobar'; - return request.post(baseURL + "/challenges/" + challenge._id).send(challenge).end(function(err, res) { - var error; - error = res.body.err; - expect(error).to.eql("You don't have permissions to edit this challenge"); - return done(); - }); - }); - it('can not close challenge', function(done) { - return request.post(baseURL + "/challenges/" + challenge._id + "/close?uid=" + user._id).end(function(err, res) { - var error; - error = res.body.err; - expect(error).to.eql("You don't have permissions to close this challenge"); - return done(); - }); - }); - return it('can not delete challenge', function(done) { - return request.del(baseURL + "/challenges/" + challenge._id).end(function(err, res) { - var error; - error = res.body.err; - expect(error).to.eql("You don't have permissions to delete this challenge"); - return done(); - }); - }); - }); - return context("non-owner that is an admin", function() { - beforeEach(function(done) { - return User.findByIdAndUpdate(user._id, { - 'contributor.admin': true - }, { - "new": true - }, done); - }); - it('can edit challenge', function(done) { - challenge.name = 'foobar'; - return request.post(baseURL + "/challenges/" + challenge._id).send(challenge).end(function(err, res) { - expect(res.body.err).to.not.exist; - return Challenge.findById(challenge._id, function(err, chal) { - expect(chal.name).to.eql('foobar'); - return done(); - }); - }); - }); - it('can close challenge', function(done) { - return request.post(baseURL + "/challenges/" + challenge._id + "/close?uid=" + user._id).end(function(err, res) { - expect(res.body.err).to.not.exist; - return User.findById(user._id, function(err, usr) { - expect(usr.achievements.challenges[0]).to.eql(challenge.name); - return done(); - }); - }); - }); - return it('can delete challenge', function(done) { - return request.del(baseURL + "/challenges/" + challenge._id).end(function(err, res) { - expect(res.body.err).to.not.exist; - return request.get(baseURL + "/challenges/" + challenge._id).end(function(err, res) { - var error; - error = res.body.err; - expect(error).to.eql("Challenge " + challenge._id + " not found"); - return done(); - }); - }); - }); - }); - }); -}); diff --git a/test/api-legacy/chat.js b/test/api-legacy/chat.js deleted file mode 100644 index 1f2dbab487..0000000000 --- a/test/api-legacy/chat.js +++ /dev/null @@ -1,71 +0,0 @@ -var Group, app, diff; - -diff = require("deep-diff"); - -Group = require("../../website/server/models/group").model; - -app = require("../../website/server/server"); - -describe("Chat", function() { - var chat, group; - group = void 0; - before(function(done) { - return async.waterfall([ - function(cb) { - return registerNewUser(cb, true); - }, function(user, cb) { - return request.post(baseURL + "/groups").send({ - name: "TestGroup", - type: "party" - }).end(function(err, res) { - expectCode(res, 200); - group = res.body; - expect(group.members.length).to.equal(1); - expect(group.leader).to.equal(user._id); - return cb(); - }); - } - ], done); - }); - chat = void 0; - return it("removes a user's chat notifications when user is kicked", function(done) { - var userToRemove; - userToRemove = null; - return async.waterfall([ - function(cb) { - return registerManyUsers(1, cb); - }, function(members, cb) { - userToRemove = members[0]; - return request.post(baseURL + "/groups/" + group._id + "/invite").send({ - uuids: [userToRemove._id] - }).end(function() { - return cb(); - }); - }, function(cb) { - return request.post(baseURL + "/groups/" + group._id + "/join").set("X-API-User", userToRemove._id).set("X-API-Key", userToRemove.apiToken).end(function(err, res) { - return cb(); - }); - }, function(cb) { - var msg; - msg = "TestMsg"; - return request.post(baseURL + "/groups/" + group._id + "/chat?message=" + msg).end(function(err, res) { - return cb(); - }); - }, function(cb) { - return request.get(baseURL + "/user").set("X-API-User", userToRemove._id).set("X-API-Key", userToRemove.apiToken).end(function(err, res) { - expect(res.body.newMessages[group._id]).to.exist; - return cb(); - }); - }, function(cb) { - return request.post(baseURL + "/groups/" + group._id + "/removeMember?uuid=" + userToRemove._id).end(function(err, res) { - return cb(); - }); - }, function(cb) { - return request.get(baseURL + "/user").set("X-API-User", userToRemove._id).set("X-API-Key", userToRemove.apiToken).end(function(err, res) { - expect(res.body.newMessages[group._id]).to.not.exist; - return cb(); - }); - } - ], done); - }); -}); diff --git a/test/api-legacy/coupons.js b/test/api-legacy/coupons.js deleted file mode 100644 index 4d4e366473..0000000000 --- a/test/api-legacy/coupons.js +++ /dev/null @@ -1,221 +0,0 @@ -var Coupon, app, makeSudoUser; - -app = require("../../website/server/server"); - -Coupon = require("../../website/server/models/coupon").model; - -makeSudoUser = function(usr, cb) { - return registerNewUser(function() { - var sudoUpdate; - sudoUpdate = { - "$set": { - "contributor.sudo": true - } - }; - return User.findByIdAndUpdate(user._id, sudoUpdate, { - "new": true - }, function(err, _user) { - usr = _user; - return cb(); - }); - }, true); -}; - -describe("Coupons", function() { - var coupons; - before(function(done) { - return async.parallel([ - function(cb) { - return mongoose.connection.collections['coupons'].drop(function(err) { - return cb(); - }); - }, function(cb) { - return mongoose.connection.collections['users'].drop(function(err) { - return cb(); - }); - } - ], done); - }); - coupons = null; - describe("POST /api/v2/coupons/generate/:event", function() { - context("while sudo user", function() { - before(function(done) { - makeSudoUser(user, done); - }); - - it("generates coupons", function(done) { - var queries; - queries = '?count=10'; - - request.post(baseURL + '/coupons/generate/wondercon' + queries).end(function(err, res) { - expectCode(res, 200); - Coupon.find({ - event: 'wondercon' - }, function(err, _coupons) { - coupons = _coupons; - expect(coupons.length).to.equal(10); - _(coupons).each(function(c) { - expect(c.event).to.equal('wondercon'); - }).value(); - done(); - }); - }); - }); - }); - - return context("while regular user", function() { - before(function(done) { - return registerNewUser(done, true); - }); - return it("does not generate coupons", function(done) { - var queries; - queries = '?count=10'; - return request.post(baseURL + '/coupons/generate/wondercon' + queries).end(function(err, res) { - expectCode(res, 401); - expect(res.body.err).to.equal('You don\'t have admin access'); - return done(); - }); - }); - }); - }); - describe("GET /api/v2/coupons", function() { - context("while sudo user", function() { - before(function(done) { - return makeSudoUser(user, done); - }); - it("gets coupons", function(done) { - var queries; - queries = '?_id=' + user._id + '&apiToken=' + user.apiToken; - return request.get(baseURL + '/coupons' + queries).end(function(err, res) { - var codes; - expectCode(res, 200); - codes = res.text; - expect(codes).to.contain('code'); - _(coupons).each(function(c) { - return expect(codes).to.contain(c._id); - }).value(); - return done(); - }); - }); - it("gets first 5 coupons out of 10 when a limit of 5 is set", function(done) { - var queries; - queries = '?_id=' + user._id + '&apiToken=' + user.apiToken + '&limit=5'; - return request.get(baseURL + '/coupons' + queries).end(function(err, res) { - var codes, firstHalf, secondHalf, sortedCoupons; - expectCode(res, 200); - codes = res.text; - sortedCoupons = _.sortBy(coupons, 'seq'); - firstHalf = sortedCoupons.slice(0, 5); - secondHalf = sortedCoupons.slice(5, 10); - _(firstHalf).each(function(c) { - return expect(codes).to.contain(c._id); - }).value(); - _(secondHalf).each(function(c) { - return expect(codes).to.not.contain(c._id); - }).value(); - return done(); - }); - }); - return it("gets last 5 coupons out of 10 when a limit of 5 is set", function(done) { - var queries; - queries = '?_id=' + user._id + '&apiToken=' + user.apiToken + '&skip=5'; - return request.get(baseURL + '/coupons' + queries).end(function(err, res) { - var codes, firstHalf, secondHalf, sortedCoupons; - expectCode(res, 200); - codes = res.text; - sortedCoupons = _.sortBy(coupons, 'seq'); - firstHalf = sortedCoupons.slice(0, 5); - secondHalf = sortedCoupons.slice(5, 10); - _(firstHalf).each(function(c) { - return expect(codes).to.not.contain(c._id); - }).value(); - _(secondHalf).each(function(c) { - return expect(codes).to.contain(c._id); - }).value(); - return done(); - }); - }); - }); - return context("while regular user", function() { - before(function(done) { - return registerNewUser(done, true); - }); - return it("does not get coupons", function(done) { - var queries; - queries = '?_id=' + user._id + '&apiToken=' + user.apiToken; - return request.get(baseURL + '/coupons' + queries).end(function(err, res) { - expectCode(res, 401); - expect(res.body.err).to.equal('You don\'t have admin access'); - return done(); - }); - }); - }); - }); - return describe("POST /api/v2/user/coupon/:code", function() { - var specialGear; - specialGear = function(gear, has) { - var items; - items = ['body_special_wondercon_gold', 'body_special_wondercon_black', 'body_special_wondercon_red', 'back_special_wondercon_red', 'back_special_wondercon_black', 'back_special_wondercon_red', 'eyewear_special_wondercon_black', 'eyewear_special_wondercon_red']; - return _(items).each(function(i) { - if (has) { - return expect(gear[i]).to.exist; - } else { - return expect(gear[i]).to.not.exist; - } - }).value(); - }; - beforeEach(function(done) { - return registerNewUser(function() { - var gear; - gear = user.items.gear.owned; - specialGear(gear, false); - return done(); - }, true); - }); - context("unused coupon", function() { - return it("applies coupon and awards equipment", function(done) { - var code; - code = coupons[0]._id; - return request.post(baseURL + '/user/coupon/' + code).end(function(err, res) { - var gear; - expectCode(res, 200); - gear = res.body.items.gear.owned; - specialGear(gear, true); - return done(); - }); - }); - }); - context("already used coupon", function() { - return it("does not apply coupon and does not award equipment", function(done) { - var code; - code = coupons[0]._id; - return request.post(baseURL + '/user/coupon/' + code).end(function(err, res) { - expectCode(res, 400); - expect(res.body.err).to.equal("Coupon already used"); - return User.findById(user._id, function(err, _user) { - var gear; - gear = _user.items.gear.owned; - specialGear(gear, false); - return done(); - }); - }); - }); - }); - return context("invalid coupon", function() { - return it("does not apply coupon and does not award equipment", function(done) { - var code; - code = "not-a-real-coupon"; - return request.post(baseURL + '/user/coupon/' + code).end(function(err, res) { - expectCode(res, 400); - expect(res.body.err).to.equal("Invalid coupon code"); - return User.findById(user._id, function(err, _user) { - var gear; - gear = _user.items.gear.owned; - specialGear(gear, false); - return done(); - }); - }); - }); - }); - }); -}); diff --git a/test/api-legacy/inAppPurchases.js b/test/api-legacy/inAppPurchases.js deleted file mode 100644 index 96809a7717..0000000000 --- a/test/api-legacy/inAppPurchases.js +++ /dev/null @@ -1,367 +0,0 @@ -var app, iapMock, inApp, rewire, sinon; - -app = require('../../website/server/server'); - -rewire = require('rewire'); - -sinon = require('sinon'); - -inApp = rewire('../../website/server/controllers/payments/iap'); - -iapMock = {}; - -inApp.__set__('iap', iapMock); - -describe('In-App Purchases', function() { - describe('Android', function() { - var next, paymentSpy, req, res; - req = { - body: { - transaction: { - reciept: 'foo', - signature: 'sig' - } - } - }; - res = { - locals: { - user: { - _id: 'user' - } - }, - json: sinon.spy() - }; - next = function() { - return true; - }; - paymentSpy = sinon.spy(); - before(function() { - return inApp.__set__('payments.buyGems', paymentSpy); - }); - afterEach(function() { - paymentSpy.reset(); - return res.json.reset(); - }); - context('successful app purchase', function() { - before(function() { - iapMock.setup = function(cb) { - return cb(null); - }; - iapMock.validate = function(iapGoogle, iapBodyReciept, cb) { - return cb(null, true); - }; - iapMock.isValidated = function(googleRes) { - return googleRes; - }; - return iapMock.GOOGLE = 'google'; - }); - it('calls res.json with succesful result object', function() { - var expectedResObj; - expectedResObj = { - ok: true, - data: true - }; - inApp.androidVerify(req, res, next); - expect(res.json).to.be.calledOnce; - return expect(res.json).to.be.calledWith(expectedResObj); - }); - return it('calls payments.buyGems function', function() { - inApp.androidVerify(req, res, next); - expect(paymentSpy).to.be.calledOnce; - return expect(paymentSpy).to.be.calledWith({ - user: res.locals.user, - paymentMethod: 'IAP GooglePlay', - amount: 5.25 - }); - }); - }); - context('error in setup', function() { - before(function() { - return iapMock.setup = function(cb) { - return cb("error in setup"); - }; - }); - it('calls res.json with setup error object', function() { - var expectedResObj; - expectedResObj = { - ok: false, - data: 'IAP Error' - }; - inApp.androidVerify(req, res, next); - expect(res.json).to.be.calledOnce; - return expect(res.json).to.be.calledWith(expectedResObj); - }); - return it('does not calls payments.buyGems function', function() { - inApp.androidVerify(req, res, next); - return expect(paymentSpy).to.not.be.called; - }); - }); - context('error in validation', function() { - before(function() { - iapMock.setup = function(cb) { - return cb(null); - }; - return iapMock.validate = function(iapGoogle, iapBodyReciept, cb) { - return cb('error in validation', true); - }; - }); - it('calls res.json with validation error object', function() { - var expectedResObj; - expectedResObj = { - ok: false, - data: { - code: 6778001, - message: 'error in validation' - } - }; - inApp.androidVerify(req, res, next); - expect(res.json).to.be.calledOnce; - return expect(res.json).to.be.calledWith(expectedResObj); - }); - return it('does not calls payments.buyGems function', function() { - inApp.androidVerify(req, res, next); - return expect(paymentSpy).to.not.be.called; - }); - }); - return context('iap is not valid', function() { - before(function() { - iapMock.setup = function(cb) { - return cb(null); - }; - iapMock.validate = function(iapGoogle, iapBodyReciept, cb) { - return cb(null, false); - }; - return iapMock.isValidated = function(googleRes) { - return googleRes; - }; - }); - it('does not call res.json', function() { - inApp.androidVerify(req, res, next); - return expect(res.json).to.not.be.called; - }); - return it('does not calls payments.buyGems function', function() { - inApp.androidVerify(req, res, next); - return expect(paymentSpy).to.not.be.called; - }); - }); - }); - return describe('iOS', function() { - var next, paymentSpy, req, res; - req = { - body: { - transaction: { - reciept: 'foo' - } - } - }; - res = { - locals: { - user: { - _id: 'user' - } - }, - json: sinon.spy() - }; - next = function() { - return true; - }; - paymentSpy = sinon.spy(); - before(function() { - return inApp.__set__('payments.buyGems', paymentSpy); - }); - afterEach(function() { - paymentSpy.reset(); - return res.json.reset(); - }); - context('successful app purchase', function() { - before(function() { - iapMock.setup = function(cb) { - return cb(null); - }; - iapMock.validate = function(iapApple, iapBodyReciept, cb) { - return cb(null, true); - }; - iapMock.isValidated = function(appleRes) { - return appleRes; - }; - iapMock.getPurchaseData = function(appleRes) { - return [ - { - productId: 'com.habitrpg.ios.Habitica.20gems' - } - ]; - }; - return iapMock.APPLE = 'apple'; - }); - it('calls res.json with succesful result object', function() { - var expectedResObj; - expectedResObj = { - ok: true, - data: true - }; - inApp.iosVerify(req, res, next); - expect(res.json).to.be.calledOnce; - return expect(res.json).to.be.calledWith(expectedResObj); - }); - return it('calls payments.buyGems function', function() { - inApp.iosVerify(req, res, next); - expect(paymentSpy).to.be.calledOnce; - return expect(paymentSpy).to.be.calledWith({ - user: res.locals.user, - paymentMethod: 'IAP AppleStore', - amount: 5.25 - }); - }); - }); - context('error in setup', function() { - before(function() { - return iapMock.setup = function(cb) { - return cb("error in setup"); - }; - }); - it('calls res.json with setup error object', function() { - var expectedResObj; - expectedResObj = { - ok: false, - data: 'IAP Error' - }; - inApp.iosVerify(req, res, next); - expect(res.json).to.be.calledOnce; - return expect(res.json).to.be.calledWith(expectedResObj); - }); - return it('does not calls payments.buyGems function', function() { - inApp.iosVerify(req, res, next); - return expect(paymentSpy).to.not.be.called; - }); - }); - context('error in validation', function() { - before(function() { - iapMock.setup = function(cb) { - return cb(null); - }; - return iapMock.validate = function(iapApple, iapBodyReciept, cb) { - return cb('error in validation', true); - }; - }); - it('calls res.json with validation error object', function() { - var expectedResObj; - expectedResObj = { - ok: false, - data: { - code: 6778001, - message: 'error in validation' - } - }; - inApp.iosVerify(req, res, next); - expect(res.json).to.be.calledOnce; - return expect(res.json).to.be.calledWith(expectedResObj); - }); - return it('does not calls payments.buyGems function', function() { - inApp.iosVerify(req, res, next); - return expect(paymentSpy).to.not.be.called; - }); - }); - context('iap is not valid', function() { - before(function() { - iapMock.setup = function(cb) { - return cb(null); - }; - iapMock.validate = function(iapApple, iapBodyReciept, cb) { - return cb(null, false); - }; - return iapMock.isValidated = function(appleRes) { - return appleRes; - }; - }); - it('does not call res.json', function() { - var expectedResObj; - inApp.iosVerify(req, res, next); - expectedResObj = { - ok: false, - data: { - code: 6778001, - message: 'Invalid receipt' - } - }; - expect(res.json).to.be.calledOnce; - return expect(res.json).to.be.calledWith(expectedResObj); - }); - return it('does not calls payments.buyGems function', function() { - inApp.iosVerify(req, res, next); - return expect(paymentSpy).to.not.be.called; - }); - }); - context('iap is valid but has no purchaseDataList', function() { - before(function() { - iapMock.setup = function(cb) { - return cb(null); - }; - iapMock.validate = function(iapApple, iapBodyReciept, cb) { - return cb(null, true); - }; - iapMock.isValidated = function(appleRes) { - return appleRes; - }; - iapMock.getPurchaseData = function(appleRes) { - return []; - }; - return iapMock.APPLE = 'apple'; - }); - it('calls res.json with succesful result object', function() { - var expectedResObj; - expectedResObj = { - ok: false, - data: { - code: 6778001, - message: 'Incorrect receipt content' - } - }; - inApp.iosVerify(req, res, next); - expect(res.json).to.be.calledOnce; - return expect(res.json).to.be.calledWith(expectedResObj); - }); - return it('does not calls payments.buyGems function', function() { - inApp.iosVerify(req, res, next); - return expect(paymentSpy).to.not.be.called; - }); - }); - return context('iap is valid, has purchaseDataList, but productId does not match', function() { - before(function() { - iapMock.setup = function(cb) { - return cb(null); - }; - iapMock.validate = function(iapApple, iapBodyReciept, cb) { - return cb(null, true); - }; - iapMock.isValidated = function(appleRes) { - return appleRes; - }; - iapMock.getPurchaseData = function(appleRes) { - return [ - { - productId: 'com.another.company' - } - ]; - }; - return iapMock.APPLE = 'apple'; - }); - it('calls res.json with incorrect reciept obj', function() { - var expectedResObj; - expectedResObj = { - ok: false, - data: { - code: 6778001, - message: 'Incorrect receipt content' - } - }; - inApp.iosVerify(req, res, next); - expect(res.json).to.be.calledOnce; - return expect(res.json).to.be.calledWith(expectedResObj); - }); - return it('does not calls payments.buyGems function', function() { - inApp.iosVerify(req, res, next); - return expect(paymentSpy).to.not.be.called; - }); - }); - }); -}); diff --git a/test/api-legacy/party.js b/test/api-legacy/party.js deleted file mode 100644 index 2f98b67bde..0000000000 --- a/test/api-legacy/party.js +++ /dev/null @@ -1,372 +0,0 @@ -var Group, app, diff; - -diff = require("deep-diff"); - -Group = require("../../website/server/models/group").model; - -app = require("../../website/server/server"); - -describe("Party", function() { - return context("Quests", function() { - var group, notParticipating, participating, party; - party = void 0; - group = void 0; - participating = []; - notParticipating = []; - beforeEach(function(done) { - Group.update({ - _id: "habitrpg" - }, { - $set: { - quest: { - key: "dilatory", - active: true, - progress: { - hp: shared.content.quests.dilatory.boss.hp, - rage: 0 - } - } - } - }).exec(); - return async.waterfall([ - function(cb) { - return registerNewUser(cb, true); - }, function(user, cb) { - return request.post(baseURL + "/groups").send({ - name: "TestGroup", - type: "party" - }).end(function(err, res) { - expectCode(res, 200); - group = res.body; - expect(group.members.length).to.equal(1); - expect(group.leader).to.equal(user._id); - return cb(); - }); - }, function(cb) { - return request.post(baseURL + '/user/tasks').send({ - type: 'daily', - text: 'daily one' - }).end(function(err, res) { - return cb(); - }); - }, function(cb) { - return request.post(baseURL + '/user/tasks').send({ - type: 'daily', - text: 'daily two' - }).end(function(err, res) { - return cb(); - }); - }, function(cb) { - return User.findByIdAndUpdate(user._id, { - $set: { - "stats.lvl": 50 - } - }, { - "new": true - }, function(err, _user) { - return cb(null, _user); - }); - }, function(_user, cb) { - var user; - user = _user; - return request.post(baseURL + "/user/batch-update").send([ - { - op: "score", - params: { - direction: "up", - id: user.dailys[0].id - } - }, { - op: "score", - params: { - direction: "up", - id: user.dailys[0].id - } - }, { - op: "update", - body: { - "stats.lvl": 50 - } - } - ]).end(function(err, res) { - user = res.body; - expect(user.party.quest.progress.up).to.be.above(0); - return async.waterfall([ - function(cb) { - return registerManyUsers(3, cb); - }, function(_party, cb) { - var inviteURL; - party = _party; - inviteURL = baseURL + "/groups/" + group._id + "/invite"; - return async.parallel([ - function(cb2) { - return request.post(inviteURL).send({ - uuids: [party[0]._id] - }).end(function() { - return cb2(); - }); - }, function(cb2) { - return request.post(inviteURL).send({ - uuids: [party[1]._id] - }).end(function() { - return cb2(); - }); - }, function(cb2) { - return request.post(inviteURL).send({ - uuids: [party[2]._id] - }).end(function(err, res) { - return cb2(); - }); - } - ], cb); - }, function(results, cb) { - var series; - series = _.reduce(party, function(m, v, i) { - m.push(function(cb2) { - return request.post(baseURL + "/groups/" + group._id + "/join").set("X-API-User", party[i]._id).set("X-API-Key", party[i].apiToken).end(function() { - return cb2(); - }); - }); - return m; - }, []); - return async.series(series, cb); - }, function(whatever, cb) { - return Group.findById(group._id, function(err, g) { - group = g; - expect(g.members.length).to.equal(4); - return cb(); - }); - } - ], function() { - return async.waterfall([ - function(cb) { - return request.post(baseURL + "/groups/" + group._id + "/questAccept?key=vice3").end(function(err, res) { - expectCode(res, 400); - return User.findByIdAndUpdate(user._id, { - $set: { - "items.quests.vice3": 1 - } - }, { - "new": true - }, cb); - }); - }, function(_user, cb) { - return request.post(baseURL + "/groups/" + group._id + "/questAccept?key=vice3").end(function(err, res) { - expectCode(res, 200); - return Group.findById(group._id, cb); - }); - }, function(_group, cb) { - expect(_group.quest.key).to.equal("vice3"); - expect(_group.quest.active).to.equal(false); - return request.post(baseURL + "/groups/" + group._id + "/questAccept").set("X-API-User", party[0]._id).set("X-API-Key", party[0].apiToken).end(function() { - return request.post(baseURL + "/groups/" + group._id + "/questAccept").set("X-API-User", party[1]._id).set("X-API-Key", party[1].apiToken).end(function(err, res) { - return request.post(baseURL + "/groups/" + group._id + "/questReject").set("X-API-User", party[2]._id).set("X-API-Key", party[2].apiToken).end(function(err, res) { - group = res.body; - expect(group.quest.active).to.equal(true); - return cb(); - }); - }); - }); - } - ], done); - }); - }); - } - ]); - }); - it("Casts a spell", function(done) { - var mp; - mp = user.stats.mp; - return request.get(baseURL + "/members/" + party[0]._id).end(function(err, res) { - party[0] = res.body; - return request.post(baseURL + "/user/class/cast/snowball?targetType=user&targetId=" + party[0]._id).end(function(err, res) { - return request.get(baseURL + "/members/" + party[0]._id).end(function(err, res) { - var difference, member; - member = res.body; - expect(member.achievements.snowball).to.equal(1); - expect(member.stats.buffs.snowball).to.exist; - difference = diff(member, party[0]); - expect(_.size(difference)).to.equal(2); - return request.put(baseURL + "/user").send({ - "stats.lvl": 5 - }).end(function(err, res) { - return request.put(baseURL + "/user").send({ - "stats.mp": 100 - }).end(function(err, res) { - return request.post(baseURL + "/user/class/cast/valorousPresence?targetType=party").end(function(err, res) { - return request.get(baseURL + "/members/" + member._id).end(function(err, res) { - expect(res.body.stats.buffs.str).to.be.above(0); - expect(diff(res.body, member).length).to.equal(1); - return done(); - }); - }); - }); - }); - }); - }); - }); - }); - it("Doesn't include people who aren't participating", function(done) { - return request.get(baseURL + "/groups/" + group._id).end(function(err, res) { - expect(_.size(res.body.quest.members)).to.equal(3); - return done(); - }); - }); - it("allows quest participants to leave quest", function(done) { - var leavingMember; - leavingMember = party[1]; - expect(group.quest.members[leavingMember._id]).to.eql(true); - return request.post(baseURL + "/groups/" + group._id + "/questLeave").set("X-API-User", leavingMember._id).set("X-API-Key", leavingMember.apiToken).end(function(err, res) { - expectCode(res, 204); - return request.get(baseURL + '/groups/party').end(function(err, res) { - expect(res.body.quest.members[leavingMember._id]).to.not.be.ok; - return done(); - }); - }); - }); - return xit("Hurts the boss", function(done) { - return request.post(baseURL + "/user/batch-update").end(function(err, res) { - var up, user; - user = res.body; - up = user.party.quest.progress.up; - expect(up).to.be.above(0); - return request.post(baseURL + "/user/batch-update").send([ - { - op: "score", - params: { - direction: "up", - id: user.dailys[0].id - } - }, { - op: "update", - body: { - lastCron: moment().subtract(1, "days") - } - } - ]).end(function(err, res) { - expect(res.body.party.quest.progress.up).to.be.above(up); - return request.post(baseURL + "/user/batch-update").end(function() { - return request.get(baseURL + "/groups/party").end(function(err, res) { - return async.waterfall([ - function(cb) { - return async.parallel([ - function(cb2) { - return Group.findById("habitrpg", { - quest: 1 - }, function(err, tavern) { - expect(tavern.quest.progress.hp).to.be.below(shared.content.quests.dilatory.boss.hp); - expect(tavern.quest.progress.rage).to.be.above(0); - return cb2(); - }); - }, function(cb2) { - var _party; - expect(res.body.quest.progress.hp).to.be.below(shared.content.quests.vice3.boss.hp); - _party = res.body.members; - expect(_.find(_party, { - _id: party[0]._id - }).stats.hp).to.be.below(50); - expect(_.find(_party, { - _id: party[1]._id - }).stats.hp).to.be.below(50); - expect(_.find(_party, { - _id: party[2]._id - }).stats.hp).to.be(50); - return cb2(); - } - ], cb); - }, function(whatever, cb) { - return async.waterfall([ - function(cb2) { - expect(user.items.pets["MantisShrimp-Base"]).to.not.be.ok(); - return Group.update({ - _id: "habitrpg" - }, { - $set: { - "quest.progress.hp": 0 - } - }, cb2); - }, function(arg1, arg2, cb2) { - expect(user.items.gear.owned.weapon_special_2).to.not.be.ok(); - return Group.findByIdAndUpdate(group._id, { - $set: { - "quest.progress.hp": 0 - } - }, { - "new": true - }, cb2); - } - ], cb); - }, function(_group, cb) { - return request.post(baseURL + "/user/batch-update").send([ - { - op: "score", - params: { - direction: "up", - id: user.dailys[1].id - } - }, { - op: "update", - body: { - lastCron: moment().subtract(1, "days") - } - } - ]).end(function() { - return cb(); - }); - }, function(cb) { - return request.post(baseURL + "/user/batch-update").end(function(err, res) { - return cb(null, res.body); - }); - }, function(_user, cb) { - return User.findById(_user._id, cb); - }, function(_user, cb) { - user = _user; - return Group.findById(group._id, cb); - }, function(_group, cb) { - var cummExp, cummGp; - cummExp = shared.content.quests.vice3.drop.exp + shared.content.quests.dilatory.drop.exp; - cummGp = shared.content.quests.vice3.drop.gp + shared.content.quests.dilatory.drop.gp; - return async.parallel([ - function(cb2) { - return Group.findById("habitrpg", function(err, tavern) { - expect(_.isEmpty(tavern.get("quest"))).to.equal(true); - expect(user.items.pets["MantisShrimp-Base"]).to.equal(5); - expect(user.items.mounts["MantisShrimp-Base"]).to.equal(true); - expect(user.items.eggs.Dragon).to.equal(2); - expect(user.items.hatchingPotions.Shade).to.equal(2); - return cb2(); - }); - }, function(cb2) { - expect(_.isEmpty(_group.get("quest"))).to.equal(true); - expect(user.items.gear.owned.weapon_special_2).to.equal(true); - expect(user.items.eggs.Dragon).to.equal(2); - expect(user.items.hatchingPotions.Shade).to.equal(2); - return async.parallel([ - function(cb3) { - return User.findById(party[0].id, function(err, mbr) { - expect(mbr.items.gear.owned.weapon_special_2).to.equal(true); - return cb3(); - }); - }, function(cb3) { - return User.findById(party[1].id, function(err, mbr) { - expect(mbr.items.gear.owned.weapon_special_2).to.equal(true); - return cb3(); - }); - }, function(cb3) { - return User.findById(party[2].id, function(err, mbr) { - expect(mbr.items.gear.owned.weapon_special_2).to.not.be.ok(); - return cb3(); - }); - } - ], cb2); - } - ], cb); - } - ], done); - }); - }); - }); - }); - }); - }); -}); diff --git a/test/api-legacy/pushNotifications.js b/test/api-legacy/pushNotifications.js deleted file mode 100644 index 7f98ddccfa..0000000000 --- a/test/api-legacy/pushNotifications.js +++ /dev/null @@ -1,430 +0,0 @@ -var app, rewire, sinon; - -app = require("../../website/server/server"); - -rewire = require('rewire'); - -sinon = require('sinon'); - -describe("Push-Notifications", function() { - before(function(done) { - return registerNewUser(done, true); - }); - return describe("Events that send push notifications", function() { - var pushSpy; - pushSpy = { - sendNotify: sinon.spy() - }; - afterEach(function(done) { - pushSpy.sendNotify.reset(); - return done(); - }); - context("Challenges", function() { - var challengeMock, challenges, userMock; - challenges = rewire("../../website/server/controllers/api-v2/challenges"); - challenges.__set__('pushNotify', pushSpy); - challengeMock = { - findById: function(arg, cb) { - return cb(null, { - leader: user._id, - name: 'challenge-name' - }); - } - }; - userMock = { - findById: function(arg, cb) { - return cb(null, user); - } - }; - challenges.__set__('Challenge', challengeMock); - challenges.__set__('User', userMock); - challenges.__set__('closeChal', function() { - return true; - }); - beforeEach(function(done) { - return registerNewUser(function() { - user.preferences.emailNotifications.wonChallenge = false; - user.save = function(cb) { - return cb(null, user); - }; - return done(); - }, true); - }); - return it("sends a push notification when you win a challenge", function(done) { - var req, res; - req = { - params: { - cid: 'challenge-id' - }, - query: { - uid: 'user-id' - } - }; - res = { - locals: { - user: user - } - }; - challenges.selectWinner(req, res); - return setTimeout(function() { - expect(pushSpy.sendNotify).to.have.been.calledOnce; - expect(pushSpy.sendNotify).to.have.been.calledWith(user, 'You won a Challenge!', 'challenge-name'); - return done(); - }, 100); - }); - }); - context("Groups", function() { - var groups, recipient; - recipient = null; - groups = rewire("../../website/server/controllers/api-v2/groups"); - groups.__set__('pushNotify', pushSpy); - before(function(done) { - return registerNewUser(function(err, _user) { - var userMock; - recipient = _user; - recipient.invitations.guilds = []; - recipient.save = function(cb) { - return cb(null, recipient); - }; - recipient.preferences.emailNotifications.invitedGuild = false; - recipient.preferences.emailNotifications.invitedParty = false; - recipient.preferences.emailNotifications.invitedQuest = false; - userMock = { - findById: function(arg, cb) { - return cb(null, recipient); - }, - find: function(arg, arg2, cb) { - return cb(null, [recipient]); - }, - update: function(arg, arg2) { - return { - exec: function() { - return true; - } - }; - } - }; - groups.__set__('User', userMock); - return done(); - }, false); - }); - it("sends a push notification when invited to a guild", function(done) { - var group, req, res; - group = { - _id: 'guild-id', - name: 'guild-name', - type: 'guild', - members: [user._id], - invites: [] - }; - group.save = function(cb) { - return cb(null, group); - }; - req = { - body: { - uuids: [recipient._id] - } - }; - res = { - locals: { - group: group, - user: user - }, - json: function() { - return true; - } - }; - groups.invite(req, res); - return setTimeout(function() { - expect(pushSpy.sendNotify).to.have.been.calledOnce; - expect(pushSpy.sendNotify).to.have.been.calledWith(recipient, 'Invited To Guild', group.name); - return done(); - }, 100); - }); - it("sends a push notification when invited to a party", function(done) { - var group, req, res; - group = { - _id: 'party-id', - name: 'party-name', - type: 'party', - members: [user._id], - invites: [] - }; - group.save = function(cb) { - return cb(null, group); - }; - req = { - body: { - uuids: [recipient._id] - } - }; - res = { - locals: { - group: group, - user: user - }, - json: function() { - return true; - } - }; - groups.invite(req, res); - return setTimeout(function() { - expect(pushSpy.sendNotify).to.have.been.calledOnce; - expect(pushSpy.sendNotify).to.have.been.calledWith(recipient, 'Invited To Party', group.name); - return done(); - }, 100); - }); - it("sends a push notification when invited to a quest", function(done) { - var group, req, res; - group = { - _id: 'party-id', - name: 'party-name', - type: 'party', - members: [user._id, recipient._id], - invites: [], - quest: {} - }; - user.items.quests.hedgehog = 5; - group.save = function(cb) { - return cb(null, group); - }; - group.markModified = function() { - return true; - }; - req = { - body: { - uuids: [recipient._id] - }, - query: { - key: 'hedgehog' - } - }; - res = { - locals: { - group: group, - user: user - }, - json: function() { - return true; - } - }; - groups.questAccept(req, res); - return setTimeout(function() { - expect(pushSpy.sendNotify).to.have.been.calledOnce; - expect(pushSpy.sendNotify).to.have.been.calledWith(recipient, 'Quest Invitation', 'Invitation for the Quest The Hedgebeast'); - return done(); - }, 100); - }); - return it("sends a push notification to participating members when quest starts", function(done) { - var group, req, res, userMock; - group = { - _id: 'party-id', - name: 'party-name', - type: 'party', - members: [user._id, recipient._id], - invites: [] - }; - group.quest = { - key: 'hedgehog', - progress: { - hp: 100 - }, - members: {} - }; - group.quest.members[recipient._id] = true; - group.save = function(cb) { - return cb(null, group); - }; - group.markModified = function() { - return true; - }; - req = { - body: { - uuids: [recipient._id] - }, - query: {} - }; - res = { - locals: { - group: group, - user: user - }, - json: function() { - return true; - } - }; - userMock = { - findOne: function(arg, arg2, cb) { - return cb(null, recipient); - }, - update: function(arg, arg2, cb) { - if (cb) { - return cb(null, user); - } else { - return { - exec: function() { - return true; - } - }; - } - } - }; - groups.__set__('User', userMock); - groups.__set__('populateQuery', function(arg, arg2, arg3) { - return { - exec: function() { - return group.members; - } - }; - }); - groups.questAccept(req, res); - return setTimeout(function() { - expect(pushSpy.sendNotify).to.have.been.calledTwice; - expect(pushSpy.sendNotify).to.have.been.calledWith(recipient, 'HabitRPG', 'Your Quest has Begun: The Hedgebeast'); - return done(); - }, 100); - }); - }); - return describe("Gifts", function() { - var recipient; - recipient = null; - before(function(done) { - return registerNewUser(function(err, _user) { - recipient = _user; - recipient.preferences.emailNotifications.giftedGems = false; - user.balance = 4; - user.save = function() { - return true; - }; - recipient.save = function() { - return true; - }; - return done(); - }, false); - }); - context("sending gems from balance", function() { - var members; - members = rewire("../../website/server/controllers/api-v2/members"); - members.sendMessage = function() { - return true; - }; - members.__set__('pushNotify', pushSpy); - members.__set__('fetchMember', function(id) { - return function(cb) { - return cb(null, recipient); - }; - }); - return it("sends a push notification", function(done) { - var req, res; - req = { - params: { - uuid: "uuid" - }, - body: { - type: 'gems', - gems: { - amount: 1 - } - } - }; - res = { - locals: { - user: user - } - }; - members.sendGift(req, res); - return setTimeout(function() { - expect(pushSpy.sendNotify).to.have.been.calledOnce; - expect(pushSpy.sendNotify).to.have.been.calledWith(recipient, 'Gifted Gems', '1 Gems - by ' + user.profile.name); - return done(); - }, 100); - }); - }); - return describe("Purchases", function() { - var membersMock, payments; - payments = rewire("../../website/server/controllers/payments"); - payments.__set__('pushNotify', pushSpy); - membersMock = { - sendMessage: function() { - return true; - } - }; - payments.__set__('members', membersMock); - context("buying gems as a purchased gift", function() { - it("sends a push notification", function(done) { - var data; - data = { - user: user, - gift: { - member: recipient, - gems: { - amount: 1 - } - } - }; - payments.buyGems(data); - return setTimeout(function() { - expect(pushSpy.sendNotify).to.have.been.calledOnce; - expect(pushSpy.sendNotify).to.have.been.calledWith(recipient, 'Gifted Gems', '1 Gems - by ' + user.profile.name); - return done(); - }, 100); - }); - return it("does not send a push notification if buying gems for self", function(done) { - var data; - data = { - user: user, - gift: { - member: user, - gems: { - amount: 1 - } - } - }; - payments.buyGems(data); - return setTimeout(function() { - expect(pushSpy.sendNotify).to.not.have.been.called; - return done(); - }, 100); - }); - }); - return context("sending a subscription as a purchased gift", function() { - it("sends a push notification", function(done) { - var data; - data = { - user: user, - gift: { - member: recipient, - subscription: { - key: 'basic_6mo' - } - } - }; - payments.createSubscription(data); - return setTimeout(function() { - expect(pushSpy.sendNotify).to.have.been.calledOnce; - expect(pushSpy.sendNotify).to.have.been.calledWith(recipient, 'Gifted Subscription', '6 months - by ' + user.profile.name); - return done(); - }, 100); - }); - return it("does not send a push notification if buying subscription for self", function(done) { - var data; - data = { - user: user, - gift: { - member: user, - subscription: { - key: 'basic_6mo' - } - } - }; - payments.createSubscription(data); - return setTimeout(function() { - expect(pushSpy.sendNotify).to.not.have.been.called; - return done(); - }, 100); - }); - }); - }); - }); - }); -}); diff --git a/test/api-legacy/score.js b/test/api-legacy/score.js deleted file mode 100644 index af31a4f334..0000000000 --- a/test/api-legacy/score.js +++ /dev/null @@ -1,142 +0,0 @@ -require("../../website/server/server"); - -describe("Score", function() { - before(function(done) { - return registerNewUser(done, true); - }); - context("Todos that did not previously exist", function() { - it("creates a completed a todo when using up url", function(done) { - return request.post(baseURL + "/user/tasks/withUp/up").send({ - type: "todo", - text: "withUp" - }).end(function(err, res) { - expectCode(res, 200); - request.get(baseURL + "/user/tasks/withUp").end(function(err, res) { - var upTodo; - upTodo = res.body; - return expect(upTodo.completed).to.equal(true); - }); - return done(); - }); - }); - it("creates an uncompleted todo when using down url", function(done) { - return request.post(baseURL + "/user/tasks/withDown/down").send({ - type: "todo", - text: "withDown" - }).end(function(err, res) { - expectCode(res, 200); - return request.get(baseURL + "/user/tasks/withDown").end(function(err, res) { - var downTodo; - downTodo = res.body; - expect(downTodo.completed).to.equal(false); - return done(); - }); - }); - }); - it("creates a completed a todo overriding the complete parameter when using up url", function(done) { - return request.post(baseURL + "/user/tasks/withUpWithComplete/up").send({ - type: "todo", - text: "withUpWithComplete", - completed: false - }).end(function(err, res) { - expectCode(res, 200); - return request.get(baseURL + "/user/tasks/withUpWithComplete").end(function(err, res) { - var upTodo; - upTodo = res.body; - expect(upTodo.completed).to.equal(true); - return done(); - }); - }); - }); - return it("Creates an uncompleted todo overriding the completed parameter when using down url", function(done) { - return request.post(baseURL + "/user/tasks/withDownWithUncomplete/down").send({ - type: "todo", - text: "withDownWithUncomplete", - completed: true - }).end(function(err, res) { - expectCode(res, 200); - return request.get(baseURL + "/user/tasks/withDownWithUncomplete").end(function(err, res) { - var downTodo; - downTodo = res.body; - expect(downTodo.completed).to.equal(false); - return done(); - }); - }); - }); - }); - context("Todo that already exists", function() { - it("It completes a todo when using up url", function(done) { - return request.post(baseURL + "/user/tasks").send({ - type: "todo", - text: "Sample Todo" - }).end(function(err, res) { - var unCompletedTodo; - expectCode(res, 200); - unCompletedTodo = res.body; - expect(unCompletedTodo.completed).to.equal(false); - return request.post(baseURL + "/user/tasks/" + unCompletedTodo._id + "/up").end(function(err, res) { - expectCode(res, 200); - return request.get(baseURL + "/user/tasks/" + unCompletedTodo._id).end(function(err, res) { - unCompletedTodo = res.body; - expect(unCompletedTodo.completed).to.equal(true); - return done(); - }); - }); - }); - }); - return it("It uncompletes a todo when using down url", function(done) { - return request.post(baseURL + "/user/tasks").send({ - type: "todo", - text: "Sample Todo", - completed: true - }).end(function(err, res) { - var completedTodo; - expectCode(res, 200); - completedTodo = res.body; - expect(completedTodo.completed).to.equal(true); - return request.post(baseURL + "/user/tasks/" + completedTodo._id + "/down").end(function(err, res) { - expectCode(res, 200); - return request.get(baseURL + "/user/tasks/" + completedTodo._id).end(function(err, res) { - completedTodo = res.body; - expect(completedTodo.completed).to.equal(false); - return done(); - }); - }); - }); - }); - }); - it("Creates and scores up a habit when using up url", function(done) { - var upHabit; - upHabit = void 0; - return request.post(baseURL + "/user/tasks/habitWithUp/up").send({ - type: "habit", - text: "testTitle", - completed: true - }).end(function(err, res) { - expectCode(res, 200); - return request.get(baseURL + "/user/tasks/habitWithUp").end(function(err, res) { - upHabit = res.body; - expect(upHabit.value).to.be.at.least(1); - expect(upHabit.type).to.equal("habit"); - return done(); - }); - }); - }); - return it("Creates and scores down a habit when using down url", function(done) { - var downHabit; - downHabit = void 0; - return request.post(baseURL + "/user/tasks/habitWithDown/down").send({ - type: "habit", - text: "testTitle", - completed: true - }).end(function(err, res) { - expectCode(res, 200); - return request.get(baseURL + "/user/tasks/habitWithDown").end(function(err, res) { - downHabit = res.body; - expect(downHabit.value).to.have.at.most(-1); - expect(downHabit.type).to.equal("habit"); - return done(); - }); - }); - }); -}); diff --git a/test/api-legacy/subscriptions.js b/test/api-legacy/subscriptions.js deleted file mode 100644 index 73b55039df..0000000000 --- a/test/api-legacy/subscriptions.js +++ /dev/null @@ -1,50 +0,0 @@ -var app, payments; - -payments = require("../../website/server/controllers/payments"); - -app = require("../../website/server/server"); - -describe("Subscriptions", function() { - before(function(done) { - return registerNewUser(done, true); - }); - return it("Handles unsubscription", function(done) { - var cron; - cron = function() { - user.lastCron = moment().subtract(1, "d"); - return user.fns.cron(); - }; - expect(user.purchased.plan.customerId).to.not.exist; - payments.createSubscription({ - user: user, - customerId: "123", - paymentMethod: "Stripe", - sub: { - key: 'basic_6mo' - } - }); - expect(user.purchased.plan.customerId).to.exist; - shared.wrap(user); - cron(); - expect(user.purchased.plan.customerId).to.exist; - payments.cancelSubscription({ - user: user - }); - cron(); - expect(user.purchased.plan.customerId).to.exist; - expect(user.purchased.plan.dateTerminated).to.exist; - user.purchased.plan.dateTerminated = moment().subtract(2, "d"); - cron(); - expect(user.purchased.plan.customerId).to.not.exist; - payments.createSubscription({ - user: user, - customerId: "123", - paymentMethod: "Stripe", - sub: { - key: 'basic_6mo' - } - }); - expect(user.purchased.plan.dateTerminated).to.not.exist; - return done(); - }); -}); diff --git a/test/api-legacy/todos.js b/test/api-legacy/todos.js deleted file mode 100644 index b72ea57223..0000000000 --- a/test/api-legacy/todos.js +++ /dev/null @@ -1,87 +0,0 @@ -require("../../website/server/server"); - -describe("Todos", function() { - before(function(done) { - return registerNewUser(done, true); - }); - beforeEach(function(done) { - return User.findById(user._id, function(err, _user) { - var user; - user = _user; - shared.wrap(user); - return done(); - }); - }); - return it("Archives old todos", function(done) { - var numTasks; - numTasks = _.size(user.todos); - return request.post(baseURL + "/user/batch-update?_v=999").send([ - { - op: "addTask", - body: { - type: "todo" - } - }, { - op: "addTask", - body: { - type: "todo" - } - }, { - op: "addTask", - body: { - type: "todo" - } - } - ]).end(function(err, res) { - expectCode(res, 200); - expect(_.size(res.body.todos)).to.equal(numTasks + 3); - numTasks += 3; - return request.post(baseURL + "/user/batch-update?_v=998").send([ - { - op: "score", - params: { - direction: "up", - id: res.body.todos[0].id - } - }, { - op: "score", - params: { - direction: "up", - id: res.body.todos[1].id - } - }, { - op: "score", - params: { - direction: "up", - id: res.body.todos[2].id - } - } - ]).end(function(err, res) { - expectCode(res, 200); - expect(_.size(res.body.todos)).to.equal(numTasks); - return request.post(baseURL + "/user/batch-update?_v=997").send([ - { - op: "updateTask", - params: { - id: res.body.todos[0].id - }, - body: { - dateCompleted: moment().subtract(4, "days") - } - }, { - op: "updateTask", - params: { - id: res.body.todos[1].id - }, - body: { - dateCompleted: moment().subtract(4, "days") - } - } - ]).end(function(err, res) { - expect(_.size(res.body.todos)).to.equal(numTasks - 2); - return done(); - }); - }); - }); - }); -}); diff --git a/test/api/v2/challenges/GET-challenges_id.test.js b/test/api/v2/challenges/GET-challenges_id.test.js deleted file mode 100644 index dab8a71c0a..0000000000 --- a/test/api/v2/challenges/GET-challenges_id.test.js +++ /dev/null @@ -1,34 +0,0 @@ -import { - createAndPopulateGroup, - generateChallenge, -} from '../../../helpers/api-integration/v2'; - -describe('GET /challenges/:id', () => { - context('Member of a challenge', () => { - let leader, party, challenge; - - before(async () => { - let { - group, - groupLeader, - } = await createAndPopulateGroup(); - - party = group; - leader = groupLeader; - challenge = await generateChallenge(leader, party, { - name: 'a created challenge', - shortName: 'aCreatedChallenge', - description: 'a description for the challenge', - }); - }); - - it('returns the challenge object', async () => { - let fetchedChallenge = await leader.get(`/challenges/${challenge._id}`); - - expect(fetchedChallenge.name).to.eql(challenge.name); - expect(fetchedChallenge.shortName).to.eql(challenge.shortName); - expect(fetchedChallenge.description).to.eql(challenge.description); - expect(fetchedChallenge.members).to.have.a.lengthOf(1); - }); - }); -}); diff --git a/test/api/v2/groups/GET-groups.test.js b/test/api/v2/groups/GET-groups.test.js deleted file mode 100644 index d941b2533e..0000000000 --- a/test/api/v2/groups/GET-groups.test.js +++ /dev/null @@ -1,100 +0,0 @@ -import { - generateGroup, - generateUser, - resetHabiticaDB, -} from '../../../helpers/api-integration/v2'; -import { - TAVERN_ID, -} from '../../../../website/server/models/group'; - -describe('GET /groups', () => { - const NUMBER_OF_PUBLIC_GUILDS = 3; - - let user; - let leader; - - before(async () => { - // Set up a world with a mixture of public and private guilds - // Invite user to a few of them - await resetHabiticaDB(); - - user = await generateUser(); - leader = await generateUser({ balance: 10 }); - - await generateGroup(leader, { - name: 'public guild - is member', - type: 'guild', - privacy: 'public', - }, { - members: [leader._id, user._id], - }); - - await generateGroup(leader, { - name: 'public guild - is not member', - type: 'guild', - privacy: 'public', - }); - - await generateGroup(leader, { - name: 'private guild - is member', - type: 'guild', - privacy: 'private', - }, { - members: [leader._id, user._id], - }); - - await generateGroup(leader, { - name: 'private guild - is not member', - type: 'guild', - privacy: 'private', - }); - - await generateGroup(leader, { - name: 'party - is not member', - type: 'party', - privacy: 'private', - }); - - await user.post('/groups', { - name: 'party - is member', - type: 'party', - privacy: 'private', - }); - }); - - context('no query passed in', () => { - xit('lists all public guilds, the tavern, user\'s party, and any private guilds that user is a part of - TODO query includes duplicates - IE, tavern is included as tavern and part of public guilds. Refactor so this is not the case'); - }); - - context('tavern passed in as query', () => { - it('returns only the tavern', async () => { - await expect(user.get('/groups', null, {type: 'tavern'})) - .to.eventually.have.a.lengthOf(1) - .and.to.have.deep.property('[0]') - .and.to.have.property('_id', TAVERN_ID); - }); - }); - - context('party passed in as query', () => { - it('returns only the user\'s party', async () => { - await expect(user.get('/groups', null, {type: 'party'})) - .to.eventually.have.a.lengthOf(1) - .and.to.have.deep.property('[0]') - .and.to.have.property('leader', user._id); - }); - }); - - context('public passed in as query', () => { - it('returns all public guilds', async () => { - await expect(user.get('/groups', null, {type: 'public'})) - .to.eventually.have.a.lengthOf(NUMBER_OF_PUBLIC_GUILDS); - }); - }); - - context('guilds passed in as query', () => { - it('returns all guilds user is a part of ', async () => { - await expect(leader.get('/groups', null, {type: 'guilds'})) - .to.eventually.have.a.lengthOf(4); - }); - }); -}); diff --git a/test/api/v2/groups/GET-groups_id.test.js b/test/api/v2/groups/GET-groups_id.test.js deleted file mode 100644 index 1de69da586..0000000000 --- a/test/api/v2/groups/GET-groups_id.test.js +++ /dev/null @@ -1,322 +0,0 @@ -import { - createAndPopulateGroup, - generateUser, - translate as t, -} from '../../../helpers/api-integration/v2'; -import { - find, - each, -} from 'lodash'; - -describe('GET /groups/:id', () => { - let typesOfGroups = {}; - typesOfGroups['public guild'] = { type: 'guild', privacy: 'public' }; - typesOfGroups['private guild'] = { type: 'guild', privacy: 'private' }; - typesOfGroups.party = { type: 'party', privacy: 'private' }; - - each(typesOfGroups, (groupDetails, groupType) => { - context(`Member of a ${groupType}`, () => { - let leader, member, createdGroup; - - before(async () => { - let groupData = await createAndPopulateGroup({ - members: 30, - groupDetails, - }); - - leader = groupData.groupLeader; - member = groupData.members[0]; - createdGroup = groupData.group; - }); - - it('returns the group object', async () => { - let group = await member.get(`/groups/${createdGroup._id}`); - - expect(group._id).to.eql(createdGroup._id); - expect(group.name).to.eql(createdGroup.name); - expect(group.type).to.eql(createdGroup.type); - expect(group.privacy).to.eql(createdGroup.privacy); - }); - - it('transforms members array to an array of user objects', async () => { - let group = await member.get(`/groups/${createdGroup._id}`); - let someMember = group.members[0]; - - expect(someMember._id).to.exist; - expect(someMember.profile.name).to.exist; - expect(someMember.contributor).to.exist; - expect(someMember.achievements).to.exist; - expect(someMember.items).to.exist; - }); - - it('transforms leader id to leader object', async () => { - let group = await member.get(`/groups/${createdGroup._id}`); - - expect(group.leader._id).to.eql(leader._id); - expect(group.leader.profile.name).to.eql(leader.profile.name); - expect(group.leader.items).to.exist; - expect(group.leader.stats).to.exist; - expect(group.leader.achievements).to.exist; - expect(group.leader.contributor).to.exist; - }); - - it('includes the user in the members list', async () => { - let group = await member.get(`/groups/${createdGroup._id}`); - let userInGroup = find(group.members, '_id', member._id); - - expect(userInGroup).to.exist; - }); - }); - }); - - context('flagged messages', () => { - let group; - - let chat1 = { - id: 'chat1', - text: 'chat 1', - flags: {}, - }; - - let chat2 = { - id: 'chat2', - text: 'chat 2', - flags: {}, - flagCount: 0, - }; - - let chat3 = { - id: 'chat3', - text: 'chat 3', - flags: { - 'user-id': true, - }, - flagCount: 1, - }; - - let chat4 = { - id: 'chat4', - text: 'chat 4', - flags: { - 'user-id': true, - 'other-user-id': true, - }, - flagCount: 2, - }; - - let chat5 = { - id: 'chat5', - text: 'chat 5', - flags: { - 'user-id': true, - 'other-user-id': true, - 'yet-another-user-id': true, - }, - flagCount: 3, - }; - - beforeEach(async () => { - let groupData = await createAndPopulateGroup({ - groupDetails: { - name: 'test guild', - type: 'guild', - privacy: 'public', - chat: [ - chat1, - chat2, - chat3, - chat4, - chat5, - ], - }, - }); - - group = groupData.group; - }); - - context('non-admin', () => { - let nonAdmin; - - beforeEach(async () => { - nonAdmin = await generateUser(); - }); - - it('does not include messages with a flag count of 2 or greater', async () => { - let fetchedGroup = await nonAdmin.get(`/groups/${group._id}`); - - expect(fetchedGroup.chat).to.have.lengthOf(3); - expect(fetchedGroup.chat[0].id).to.eql(chat1.id); - expect(fetchedGroup.chat[1].id).to.eql(chat2.id); - expect(fetchedGroup.chat[2].id).to.eql(chat3.id); - }); - - it('does not include user ids in flags object', async () => { - let fetchedGroup = await nonAdmin.get(`/groups/${group._id}`); - let chatWithOneFlag = fetchedGroup.chat[2]; - - expect(chatWithOneFlag.id).to.eql(chat3.id); - expect(chat3.flags).to.eql({ 'user-id': true }); - expect(chatWithOneFlag.flags).to.eql({}); - }); - }); - - context('admin', () => { - let admin; - - beforeEach(async () => { - admin = await generateUser({ - 'contributor.admin': true, - }); - }); - - it('includes all messages', async () => { - let fetchedGroup = await admin.get(`/groups/${group._id}`); - - expect(fetchedGroup.chat).to.have.lengthOf(5); - expect(fetchedGroup.chat[0].id).to.eql(chat1.id); - expect(fetchedGroup.chat[1].id).to.eql(chat2.id); - expect(fetchedGroup.chat[2].id).to.eql(chat3.id); - expect(fetchedGroup.chat[3].id).to.eql(chat4.id); - expect(fetchedGroup.chat[4].id).to.eql(chat5.id); - }); - - it('includes user ids in flags object', async () => { - let fetchedGroup = await admin.get(`/groups/${group._id}`); - let chatWithOneFlag = fetchedGroup.chat[2]; - - expect(chatWithOneFlag.id).to.eql(chat3.id); - expect(chat3.flags).to.eql({ 'user-id': true }); - expect(chatWithOneFlag.flags).to.eql(chat3.flags); - }); - }); - }); - - context('Non-member of a public guild', () => { - let nonMember, createdGroup; - - before(async () => { - let groupData = await createAndPopulateGroup({ - members: 1, - groupDetails: { - name: 'test guild', - type: 'guild', - privacy: 'public', - }, - }); - - createdGroup = groupData.group; - nonMember = await generateUser(); - }); - - it('returns the group object for a non-member', async () => { - let group = await nonMember.get(`/groups/${createdGroup._id}`); - - expect(group._id).to.eql(createdGroup._id); - expect(group.name).to.eql(createdGroup.name); - expect(group.type).to.eql(createdGroup.type); - expect(group.privacy).to.eql(createdGroup.privacy); - }); - - it('does not include user in members list', async () => { - let group = await nonMember.get(`/groups/${createdGroup._id}`); - let userInGroup = find(group.members, '_id', nonMember._id); - - expect(userInGroup).to.not.exist; - }); - }); - - context('Private Guilds', () => { - let nonMember, createdGroup; - - before(async () => { - let groupData = await createAndPopulateGroup({ - members: 1, - groupDetails: { - name: 'test guild', - type: 'guild', - privacy: 'private', - }, - }); - - createdGroup = groupData.group; - nonMember = await generateUser(); - }); - - it('does not return the group object for a non-member', async () => { - await expect(nonMember.get(`/groups/${createdGroup._id}`)) - .to.eventually.be.rejected.and.eql({ - code: 404, - text: t('messageGroupNotFound'), - }); - }); - }); - - context('Non-member of a party', () => { - let nonMember, createdGroup; - - before(async () => { - let groupData = await createAndPopulateGroup({ - members: 1, - groupDetails: { - name: 'test party', - type: 'party', - privacy: 'private', - }, - }); - - createdGroup = groupData.group; - nonMember = await generateUser(); - }); - - it('does not return the group object for a non-member', async () => { - await expect(nonMember.get(`/groups/${createdGroup._id}`)) - .to.eventually.be.rejected.and.eql({ - code: 404, - text: t('messageGroupNotFound'), - }); - }); - }); - - context('Member of a party', () => { - let member, createdGroup; - - before(async () => { - let groupData = await createAndPopulateGroup({ - members: 1, - groupDetails: { - name: 'test party', - type: 'party', - privacy: 'private', - }, - }); - - createdGroup = groupData.group; - member = groupData.members[0]; - }); - - it('returns the user\'s party if an id of "party" is passed in', async () => { - let group = await member.get('/groups/party'); - - expect(group._id).to.eql(createdGroup._id); - expect(group.name).to.eql(createdGroup.name); - expect(group.type).to.eql(createdGroup.type); - expect(group.privacy).to.eql(createdGroup.privacy); - }); - }); - - context('Non-existent group', () => { - let user; - - beforeEach(async () => { - user = await generateUser(); - }); - - it('returns error if group does not exist', async () => { - await expect(user.get('/groups/group-that-does-not-exist')) - .to.eventually.be.rejected.and.eql({ - code: 404, - text: t('messageGroupNotFound'), - }); - }); - }); -}); diff --git a/test/api/v2/groups/POST-groups.test.js b/test/api/v2/groups/POST-groups.test.js deleted file mode 100644 index 8da165aaf7..0000000000 --- a/test/api/v2/groups/POST-groups.test.js +++ /dev/null @@ -1,144 +0,0 @@ -import { - generateGroup, - generateUser, - translate as t, -} from '../../../helpers/api-integration/v2'; - -describe('POST /groups', () => { - context('All groups', () => { - let leader; - - beforeEach(async () => { - leader = await generateUser(); - }); - - xit('returns defaults? (TODO: it\'s possible to create a group without a type. Should the group default to party? Should we require type to be set?', async () => { - return leader.post('/groups').then((group) => { - expect(group._id).to.exist; - expect(group.name).to.eql(`${leader.profile.name}'s group`); - expect(group.type).to.eql('party'); - expect(group.privacy).to.eql('private'); - }); - }); - - it('returns a group object', async () => { - let group = await leader.post('/groups', { - name: 'Test Group', - type: 'party', - leaderOnly: { challenges: true }, - description: 'Test Group Description', - leaderMessage: 'Test Group Message', - }); - - expect(group._id).to.exist; - expect(group.leader).to.eql(leader._id); - expect(group.name).to.eql(group.name); - expect(group.description).to.eql(group.description); - expect(group.leaderMessage).to.eql(group.leaderMessage); - expect(group.leaderOnly).to.eql(group.leaderOnly); - expect(group.memberCount).to.eql(1); - }); - - it('returns a populated members array', async () => { - let party = await leader.post('/groups', { - type: 'party', - }); - - let member = party.members[0]; - - expect(member._id).to.eql(leader._id); - expect(member.profile).to.eql(leader.profile); - expect(member.contributor).to.eql(leader.contributor); - }); - }); - - context('Parties', () => { - let leader; - - beforeEach(async () => { - leader = await generateUser(); - }); - - it('allows party creation without gems', async () => { - let party = await leader.post('/groups', { - type: 'party', - }); - - expect(party._id).to.exist; - }); - - it('prevents party creation if user is already in party', async () => { - await generateGroup(leader, { - name: 'first party that user attempts to create', - type: 'party', - }); - - await expect(leader.post('/groups', { type: 'party' })).to.eventually.be.rejected.and.eql({ - code: 400, - text: t('messageGroupAlreadyInParty'), - }); - }); - - xit('prevents creating a public party. TODO: it is possible to create a public party. Should we send back an error? Automatically switch the privacy to private?', async () => { - return expect(leader.post('/groups', { - type: 'party', - privacy: 'public', - })).to.eventually.be.rejected.and.eql({ - code: 400, - text: 'Parties must be private', - }); - }); - }); - - context('Guilds', () => { - let leader; - - beforeEach(async () => { - leader = await generateUser({ - balance: 2, - }); - }); - - it('prevents guild creation when user does not have enough gems', async () => { - let userWithoutGems = await generateUser({ - balance: 0.75, - }); - - await expect(userWithoutGems.post('/groups', { type: 'guild' })).to.eventually.be.rejected.and.eql({ - code: 401, - text: t('messageInsufficientGems'), - }); - }); - - it('can create a public guild', async () => { - let guild = await leader.post('/groups', { - type: 'guild', - privacy: 'public', - }); - - expect(guild.leader).to.eql(leader._id); - }); - - it('can create a private guild', async () => { - let privateGuild = await leader.post('/groups', { - type: 'guild', - privacy: 'private', - }); - - expect(privateGuild.leader).to.eql(leader._id); - }); - - it('deducts gems from user and adds them to guild bank', async () => { - let guild = await leader.post('/groups', { - type: 'guild', - privacy: 'private', - }); - - expect(guild.balance).to.eql(1); - - let updatedUser = await leader.get('/user'); - - expect(updatedUser.balance).to.eql(1); - }); - }); -}); diff --git a/test/api/v2/groups/POST-groups_id.test.js b/test/api/v2/groups/POST-groups_id.test.js deleted file mode 100644 index 9799ecff4e..0000000000 --- a/test/api/v2/groups/POST-groups_id.test.js +++ /dev/null @@ -1,67 +0,0 @@ -import { - generateGroup, - generateUser, - translate as t, -} from '../../../helpers/api-integration/v2'; - -describe('POST /groups/:id', () => { - context('user is not the leader of the group', () => { - let user, otherUser, groupUserDoesNotOwn; - - beforeEach(async () => { - return Promise.all([ - generateUser({ balance: 10 }), - generateUser({ balance: 10 }), - ]).then((users) => { - user = users[0]; - otherUser = users[1]; - - return generateGroup(otherUser, { - name: 'Group not Owned By User', - type: 'guild', - privacy: 'public', - members: [user, otherUser], - }); - }).then((group) => { - groupUserDoesNotOwn = group; - }); - }); - - it('does not allow user to update group', async () => { - return expect(user.post(`/groups/${groupUserDoesNotOwn._id}`, { - name: 'Change', - })).to.eventually.be.rejected.and.eql({ - code: 401, - text: t('messageGroupOnlyLeaderCanUpdate'), - }); - }); - }); - - context('user is the leader of the group', () => { - let user, usersGroup; - - beforeEach(async () => { - user = await generateUser({ - balance: 10, - }); - - usersGroup = await generateGroup(user, { - name: 'Original Group Title', - type: 'guild', - privacy: 'public', - }); - }); - - it('allows user to update group', async () => { - await user.post(`/groups/${usersGroup._id}`, { - name: 'New Group Title', - description: 'New group description', - }); - - await usersGroup.sync(); - - expect(usersGroup.name).to.eql('New Group Title'); - expect(usersGroup.description).to.eql('New group description'); - }); - }); -}); diff --git a/test/api/v2/groups/POST-groups_id_invite.test.js b/test/api/v2/groups/POST-groups_id_invite.test.js deleted file mode 100644 index ef768dbf7e..0000000000 --- a/test/api/v2/groups/POST-groups_id_invite.test.js +++ /dev/null @@ -1,89 +0,0 @@ -import { - createAndPopulateGroup, - generateUser, -} from '../../../helpers/api-integration/v2'; -import { each } from 'lodash'; - -describe('POST /groups/:id/invite', () => { - context('user is a member of the group', () => { - each({ - 'public guild': {type: 'guild', privacy: 'public'}, - 'private guild': {type: 'guild', privacy: 'private'}, - party: {type: 'party', privacy: 'private'}, - }, (groupDetails, groupType) => { - let group, invitee, inviter; - - beforeEach(async () => { - invitee = await generateUser(); - let groupData = await createAndPopulateGroup({ - groupDetails, - members: 1, - }); - group = groupData.group; - inviter = groupData.members[0]; - }); - - it(`allows user to send an invitation for a ${groupType}`, async () => { - await inviter.post(`/groups/${group._id}/invite`, { - uuids: [invitee._id], - }); - group = await inviter.get(`/groups/${group._id}`); - expect(_.find(group.invites, {_id: invitee._id})._id).to.exists; - }); - }); - }); - - context('user is a not member of the group', () => { - each({ - 'public guild': {type: 'guild', privacy: 'public'}, - }, (groupDetails, groupType) => { - context(`the group is a ${groupType}`, () => { - let group, invitee, inviter; - - beforeEach(async () => { - invitee = await generateUser(); - inviter = await generateUser(); - let groupData = await createAndPopulateGroup({ - groupDetails, - }); - group = groupData.group; - }); - - it(`allows user to send an invitation for a ${groupType}`, async () => { - await inviter.post(`/groups/${group._id}/invite`, { - uuids: [invitee._id], - }); - group = await inviter.get(`/groups/${group._id}`); - expect(_.find(group.invites, {_id: invitee._id})._id).to.exists; - }); - }); - }); - - each({ - 'private guild': {type: 'guild', privacy: 'private'}, - party: {type: 'party', privacy: 'private'}, - }, (groupDetails, groupType) => { - context(`the group is a ${groupType}`, () => { - let group, invitee, inviter; - - beforeEach(async () => { - invitee = await generateUser(); - inviter = await generateUser(); - let groupData = await createAndPopulateGroup({ - groupDetails, - }); - group = groupData.group; - }); - - it(`does not allows user to send an invitation for a ${groupType}`, async () => { - return expect(inviter.post(`/groups/${group._id}/invite`, { - uuids: [invitee._id], - })).to.eventually.be.rejected.and.eql({ - code: 401, - text: 'Only a member can invite new members!', - }); - }); - }); - }); - }); -}); diff --git a/test/api/v2/groups/POST-groups_id_join.test.js b/test/api/v2/groups/POST-groups_id_join.test.js deleted file mode 100644 index cf216354a0..0000000000 --- a/test/api/v2/groups/POST-groups_id_join.test.js +++ /dev/null @@ -1,110 +0,0 @@ -import { - createAndPopulateGroup, - generateUser, - translate as t, -} from '../../../helpers/api-integration/v2'; -import { each } from 'lodash'; - -describe('POST /groups/:id/join', () => { - context('user is already a member of the group', () => { - it('returns an error'); - }); - - each({ - 'public guild': {type: 'guild', privacy: 'public'}, - 'private guild': {type: 'guild', privacy: 'private'}, - party: {type: 'party', privacy: 'private'}, - }, (groupDetails, groupType) => { - context(`user has invitation to a ${groupType}`, () => { - let group, invitee; - - beforeEach(async () => { - let groupData = await createAndPopulateGroup({ - groupDetails, - invites: 1, - }); - group = groupData.group; - invitee = groupData.invitees[0]; - }); - - it(`allows user to join a ${groupType}`, async () => { - await invitee.post(`/groups/${group._id}/join`); - - group = await invitee.get(`/groups/${group._id}`); - expect(_.find(group.members, {_id: invitee._id})._id).to.exists; - }); - }); - }); - - each({ - 'private guild': {type: 'guild', privacy: 'private'}, - party: {type: 'party', privacy: 'private'}, - }, (groupDetails, groupType) => { - context(`user does not have an invitation to a ${groupType}`, () => { - let group, user; - - beforeEach(async () => { - let groupData = await createAndPopulateGroup({ - groupDetails, - }); - group = groupData.group; - user = await generateUser(); - }); - - it(`does not allow user to join a ${groupType}`, async () => { - await expect(user.post(`/groups/${group._id}/join`)).to.eventually.be.rejected.and.eql({ - code: 401, - text: t('messageGroupRequiresInvite'), - }); - }); - }); - }); - - context('user does not have an invitation to a public group', () => { - let group, user; - - beforeEach(async () => { - let groupData = await createAndPopulateGroup({ - groupDetails: { - type: 'guild', - privacy: 'public', - }, - }); - group = groupData.group; - user = await generateUser(); - }); - - it('allows user to join a public guild', async () => { - await user.post(`/groups/${group._id}/join`); - - group = await user.get(`/groups/${group._id}`); - - expect(_.find(group.members, {_id: user._id})._id).to.exists; - }); - }); - - context('public guild has no leader', () => { - let user, group; - - beforeEach(async () => { - let groupData = await createAndPopulateGroup({ - groupDetails: { - name: 'test guild', - type: 'guild', - privacy: 'public', - }, - }); - group = groupData.group; - await groupData.groupLeader.post(`/groups/${group._id}/leave`); - user = await generateUser(); - }); - - it('makes the joining user the leader', async () => { - await user.post(`/groups/${group._id}/join`); - - group = await user.get(`/groups/${group._id}`); - - expect(group.leader._id).to.eql(user._id); - }); - }); -}); diff --git a/test/api/v2/groups/POST-groups_id_leave.test.js b/test/api/v2/groups/POST-groups_id_leave.test.js deleted file mode 100644 index f6511e941c..0000000000 --- a/test/api/v2/groups/POST-groups_id_leave.test.js +++ /dev/null @@ -1,136 +0,0 @@ -import { - checkExistence, - createAndPopulateGroup, -} from '../../../helpers/api-integration/v2'; - -describe('POST /groups/:id/leave', () => { - context('user is not member of the group', () => { - it('returns an error'); - }); - - context('user is a non-leader member of a guild', () => { - let user, group; - - beforeEach(async () => { - let groupData = await createAndPopulateGroup({ - members: 3, - groupDetails: { - name: 'test guild', - type: 'guild', - privacy: 'public', - }, - }); - - user = groupData.members[0]; - group = groupData.group; - }); - - it('leaves the group', async () => { - await user.post(`/groups/${group._id}/leave`); - - await user.sync(); - - expect(user.guilds).to.not.include(group._id); - }); - }); - - context('user is the last member of a public guild', () => { - let user, group; - - beforeEach(async () => { - let groupData = await createAndPopulateGroup({ - groupDetails: { - name: 'test guild', - type: 'guild', - privacy: 'public', - }, - }); - - user = groupData.groupLeader; - group = groupData.group; - }); - - it('leaves the group accessible', async () => { - await user.post(`/groups/${group._id}/leave`); - - await expect(user.get(`/groups/${group._id}`)).to.eventually.have.property('_id', group._id); - }); - }); - - context('user is the last member of a private group', () => { - let user, group; - - beforeEach(async () => { - let groupData = await createAndPopulateGroup({ - groupDetails: { - name: 'test guild', - type: 'guild', - privacy: 'private', - }, - }); - - user = groupData.groupLeader; - group = groupData.group; - }); - - it('group is deleted', async () => { - await user.post(`/groups/${group._id}/leave`); - - await expect(checkExistence('groups', group._id)).to.eventually.eql(false); - }); - }); - - context('user is the last member of a private group with pending invites', () => { - let user, invitee1, invitee2, group; - - beforeEach(async () => { - let groupData = await createAndPopulateGroup({ - invites: 2, - groupDetails: { - name: 'test guild', - type: 'guild', - privacy: 'private', - }, - }); - - user = groupData.groupLeader; - group = groupData.group; - invitee1 = groupData.invitees[0]; - invitee2 = groupData.invitees[1]; - }); - - it('deletes the group invitations from users', async () => { - await user.post(`/groups/${group._id}/leave`); - - await expect(invitee1.get('/user')).to.eventually.have.deep.property('invitations.guilds').and.to.be.empty; - await expect(invitee2.get('/user')).to.eventually.have.deep.property('invitations.guilds').and.to.be.empty; - }); - }); - - context('user is the last member of a party with pending invites', () => { - let user, invitee1, invitee2, group; - - beforeEach(async () => { - let groupData = await createAndPopulateGroup({ - invites: 2, - groupDetails: { - name: 'test guild', - type: 'party', - privacy: 'private', - }, - }); - - user = groupData.groupLeader; - group = groupData.group; - invitee1 = groupData.invitees[0]; - invitee2 = groupData.invitees[1]; - }); - - it('deletes the group invitations from users', async () => { - await user.post(`/groups/${group._id}/leave`); - - await expect(invitee1.get('/user')).to.eventually.have.deep.property('invitations.party').and.to.be.empty; - await expect(invitee2.get('/user')).to.eventually.have.deep.property('invitations.party').and.to.be.empty; - }); - }); -}); diff --git a/test/api/v2/groups/POST-groups_id_removeMember.test.js b/test/api/v2/groups/POST-groups_id_removeMember.test.js deleted file mode 100644 index ccedd69e9d..0000000000 --- a/test/api/v2/groups/POST-groups_id_removeMember.test.js +++ /dev/null @@ -1,53 +0,0 @@ -import { - createAndPopulateGroup, - translate as t, -} from '../../../helpers/api-integration/v2'; - -describe('POST /groups/:id/removeMember', () => { - context('user is not member of the group', () => { - it('returns an error'); - }); - - context('user is a non-leader member of a guild', () => { - it('returns an error'); - }); - - context('user is the leader of a guild', () => { - let leader, member, group; - - beforeEach(async () => { - return createAndPopulateGroup({ - members: 1, - groupDetails: { - name: 'test group', - type: 'guild', - privacy: 'public', - }, - }).then((res) => { - leader = res.groupLeader; - member = res.members[0]; - group = res.group; - }); - }); - - it('does not allow leader to remove themselves', async () => { - return expect(leader.post(`/groups/${group._id}/removeMember`, null, { - uuid: leader._id, - })).to.eventually.be.rejected.and.eql({ - code: 401, - text: t('messageGroupCannotRemoveSelf'), - }); - }); - - it('can remove other members of guild', async () => { - return leader.post(`/groups/${group._id}/removeMember`, null, { - uuid: member._id, - }).then(() => { - return leader.get(`/groups/${group._id}`); - }).then((guild) => { - expect(guild.members).to.have.a.lengthOf(1); - expect(guild.members[0]._id).to.not.eql(member._id); - }); - }); - }); -}); diff --git a/test/api/v2/groups/chat/DELETE-groups_id_chat.test.js b/test/api/v2/groups/chat/DELETE-groups_id_chat.test.js deleted file mode 100644 index dc575b0ec6..0000000000 --- a/test/api/v2/groups/chat/DELETE-groups_id_chat.test.js +++ /dev/null @@ -1,39 +0,0 @@ -import { - createAndPopulateGroup, - translate as t, -} from '../../../../helpers/api-integration/v2'; - -describe('DELETE /groups/:id/chat', () => { - let group, message, user; - - beforeEach(async () => { - return createAndPopulateGroup({ - groupDetails: { - type: 'guild', - privacy: 'public', - }, - }).then((res) => { - group = res.group; - user = res.groupLeader; - - return user.post(`/groups/${group._id}/chat`, null, { message: 'Some message' }); - }).then((res) => { - message = res.message; - }); - }); - - it('deletes a message', async () => { - return user.del(`/groups/${group._id}/chat/${message.id}`).then(() => { - return user.get(`/groups/${group._id}/chat/`); - }).then((messages) => { - expect(messages).to.have.length(0); - }); - }); - - it('returns an error is message does not exist', async () => { - return expect(user.del(`/groups/${group._id}/chat/some-fake-id`)).to.eventually.be.rejected.and.eql({ - code: 404, - text: t('messageGroupChatNotFound'), - }); - }); -}); diff --git a/test/api/v2/groups/chat/GET-groups_id_chat.test.js b/test/api/v2/groups/chat/GET-groups_id_chat.test.js deleted file mode 100644 index d6dc691af7..0000000000 --- a/test/api/v2/groups/chat/GET-groups_id_chat.test.js +++ /dev/null @@ -1,38 +0,0 @@ -import { - createAndPopulateGroup, -} from '../../../../helpers/api-integration/v2'; - -describe('GET /groups/:id/chat', () => { - context('group with multiple messages', () => { - let group, member, user; - - beforeEach(async () => { - let groupData = await createAndPopulateGroup({ - groupDetails: { - type: 'guild', - privacy: 'public', - }, - members: 1, - }); - - group = groupData.group; - user = groupData.groupLeader; - member = groupData.members[0]; - - await member.post(`/groups/${group._id}/chat`, null, { message: 'Group member message' }); - await user.post(`/groups/${group._id}/chat`, null, { message: 'User message' }); - }); - - it('gets messages', async () => { - let messages = await user.get(`/groups/${group._id}/chat`); - - expect(messages).to.have.length(2); - - let message = messages[0]; - - expect(message.id).to.exist; - expect(message.text).to.exist; - expect(message.uuid).to.exist; - }); - }); -}); diff --git a/test/api/v2/groups/chat/POST-groups_id_chat.test.js b/test/api/v2/groups/chat/POST-groups_id_chat.test.js deleted file mode 100644 index cc280077aa..0000000000 --- a/test/api/v2/groups/chat/POST-groups_id_chat.test.js +++ /dev/null @@ -1,42 +0,0 @@ -import { - createAndPopulateGroup, - translate as t, -} from '../../../../helpers/api-integration/v2'; - -describe('POST /groups/:id/chat', () => { - let group, user; - - beforeEach(async () => { - return createAndPopulateGroup({ - groupDetails: { - type: 'guild', - privacy: 'public', - }, - }).then((res) => { - group = res.group; - user = res.groupLeader; - }); - }); - - it('creates a chat message', async () => { - return user.post(`/groups/${group._id}/chat`, null, { - message: 'Test Message', - }).then((res) => { - let message = res.message; - - expect(message.id).to.exist; - expect(message.timestamp).to.exist; - expect(message.text).to.eql('Test Message'); - expect(message.uuid).to.eql(user._id); - }); - }); - - it('does not post an empty message', async () => { - return expect(user.post(`/groups/${group._id}/chat`, null, { - message: '', - })).to.eventually.be.rejected.and.eql({ - code: 400, - text: t('messageGroupChatBlankMessage'), - }); - }); -}); diff --git a/test/api/v2/groups/chat/POST-groups_id_chat_id_clearflags.test.js b/test/api/v2/groups/chat/POST-groups_id_chat_id_clearflags.test.js deleted file mode 100644 index 0b6a54c429..0000000000 --- a/test/api/v2/groups/chat/POST-groups_id_chat_id_clearflags.test.js +++ /dev/null @@ -1,130 +0,0 @@ -import { - createAndPopulateGroup, - generateUser, - translate as t, -} from '../../../../helpers/api-integration/v2'; - -describe('POST /groups/:id/chat/:id/clearflags', () => { - let guild; - - beforeEach(async () => { - let { group } = await createAndPopulateGroup({ - groupDetails: { - type: 'guild', - privacy: 'public', - members: 1, - chat: [{ - id: 'message-to-clear', - flagCount: 1, - flags: { 'some-id': true }, - }], - }, - }); - - guild = group; - }); - - context('non admin', () => { - let nonadmin; - - beforeEach(async () => { - nonadmin = await generateUser(); - }); - - it('cannot clear flags', async () => { - return expect(nonadmin.post(`/groups/${guild._id}/chat/message-to-clear/clearflags`)) - .to.eventually.be.rejected.and.eql({ - code: 401, - text: t('messageGroupChatAdminClearFlagCount'), - }); - }); - }); - - context('admin', () => { - let admin; - - beforeEach(async () => { - return generateUser({ - 'contributor.admin': true, - }).then((user) => { - admin = user; - }); - }); - - it('clears flags', async () => { - return admin.post(`/groups/${guild._id}/chat/message-to-clear/clearflags`).then(() => { - return admin.get(`/groups/${guild._id}/chat`); - }).then((messages) => { - expect(messages[0].flagCount).to.eql(0); - }); - }); - - it('leaves old flags on the flag object', async () => { - return admin.post(`/groups/${guild._id}/chat/message-to-clear/clearflags`).then(() => { - return admin.get(`/groups/${guild._id}/chat`); - }).then((messages) => { - expect(messages[0].flags).to.have.property('some-id', true); - }); - }); - - it('returns error if message does not exist', async () => { - return expect(admin.post(`/groups/${guild._id}/chat/non-existant-message/clearflags`)) - .to.eventually.be.rejected.and.eql({ - code: 404, - text: t('messageGroupChatNotFound'), - }); - }); - }); - - context('admin user, group with multiple messages', () => { - let admin, author, groupWithMessages; - - beforeEach(async () => { - author = await generateUser(); - admin = await generateUser({ - 'contributor.admin': true, - }); - - let groupData = await createAndPopulateGroup({ - groupDetails: { - type: 'guild', - privacy: 'public', - chat: [ - { id: 'message-to-unflag', uuid: author._id, flagCount: 1, flags: {'some-user': true} }, - { id: '1-flag-message', uuid: author._id, flagCount: 1, flags: { id1: true } }, - { id: '2-flag-message', uuid: author._id, flagCount: 2, flags: { id1: true, id2: true } }, - { id: 'no-flags', uuid: author._id, flagCount: 0, flags: {} }, - ], - }, - members: 1, - }); - - groupWithMessages = groupData.group; - }); - - it('changes only the message that is flagged', async () => { - return admin.post(`/groups/${groupWithMessages._id}/chat/message-to-unflag/clearflags`).then(() => { - return admin.get(`/groups/${groupWithMessages._id}/chat`); - }).then((messages) => { - expect(messages).to.have.lengthOf(4); - - let messageThatWasUnflagged = messages[0]; - let messageWith1Flag = messages[1]; - let messageWith2Flag = messages[2]; - let messageWithoutFlags = messages[3]; - - expect(messageThatWasUnflagged.flagCount).to.eql(0); - expect(messageThatWasUnflagged.flags).to.have.property('some-user', true); - - expect(messageWith1Flag.flagCount).to.eql(1); - expect(messageWith1Flag.flags).to.have.property('id1', true); - - expect(messageWith2Flag.flagCount).to.eql(2); - expect(messageWith2Flag.flags).to.have.property('id1', true); - - expect(messageWithoutFlags.flagCount).to.eql(0); - expect(messageWithoutFlags.flags).to.eql({}); - }); - }); - }); -}); diff --git a/test/api/v2/groups/chat/POST-groups_id_chat_id_flag.test.js b/test/api/v2/groups/chat/POST-groups_id_chat_id_flag.test.js deleted file mode 100644 index cd813061b2..0000000000 --- a/test/api/v2/groups/chat/POST-groups_id_chat_id_flag.test.js +++ /dev/null @@ -1,186 +0,0 @@ -import { - createAndPopulateGroup, - generateUser, - translate as t, -} from '../../../../helpers/api-integration/v2'; - -describe('POST /groups/:id/chat/:id/flag', () => { - context('another member\'s message', () => { - let group, member, message, user; - - beforeEach(async () => { - return createAndPopulateGroup({ - groupDetails: { - type: 'guild', - privacy: 'public', - }, - members: 1, - }).then((res) => { - group = res.group; - user = res.groupLeader; - member = res.members[0]; - - return member.post(`/groups/${group._id}/chat`, null, { message: 'Group member message' }); - }).then((res) => { - message = res.message; - }); - }); - - it('flags message', async () => { - return user.post(`/groups/${group._id}/chat/${message.id}/flag`).then(() => { - return user.get(`/groups/${group._id}/chat`); - }).then((messages) => { - expect(messages[0].flagCount).to.eql(1); - }); - }); - - it('cannot flag the same message twice', async () => { - return expect(user.post(`/groups/${group._id}/chat/${message.id}/flag`).then(() => { - return user.post(`/groups/${group._id}/chat/${message.id}/flag`); - })).to.eventually.be.rejected.and.eql({ - code: 401, - text: t('messageGroupChatFlagAlreadyReported'), - }); - }); - }); - - context('own message', () => { - let group, message, user; - - beforeEach(async () => { - return createAndPopulateGroup({ - groupDetails: { - type: 'guild', - privacy: 'public', - members: 1, - }, - }).then((res) => { - group = res.group; - user = res.groupLeader; - - return user.post(`/groups/${group._id}/chat`, null, { message: 'User\'s own message' }); - }).then((res) => { - message = res.message; - }); - }); - - it('cannot flag message', async () => { - return expect(user.post(`/groups/${group._id}/chat/${message.id}/flag`)) - .to.eventually.be.rejected.and.eql({ - code: 401, - text: t('messageGroupChatFlagOwnMessage'), - }); - }); - }); - - context('nonexistant message', () => { - let group, user; - - beforeEach(async () => { - return createAndPopulateGroup({ - groupDetails: { - type: 'guild', - privacy: 'public', - }, - }).then((res) => { - group = res.group; - user = res.groupLeader; - }); - }); - - it('returns error', async () => { - return expect(user.post(`/groups/${group._id}/chat/non-existant-message/flag`)) - .to.eventually.be.rejected.and.eql({ - code: 404, - text: t('messageGroupChatNotFound'), - }); - }); - }); - - context('group with multiple messages', () => { - let admin, author, group, user; - - beforeEach(async () => { - author = await generateUser(); - admin = await generateUser({ - 'contributor.admin': true, - }); - - let groupData = await createAndPopulateGroup({ - groupDetails: { - type: 'guild', - privacy: 'public', - chat: [ - { id: 'message-to-be-flagged', uuid: author._id, flagCount: 0, flags: {} }, - { id: '1-flag-message', uuid: author._id, flagCount: 1, flags: { id1: true } }, - { id: '2-flag-message', uuid: author._id, flagCount: 2, flags: { id1: true, id2: true } }, - { id: 'no-flags', uuid: author._id, flagCount: 0, flags: {} }, - ], - }, - members: 1, - }); - - group = groupData.group; - user = groupData.groupLeader; - }); - - it('changes only the message that is flagged', async () => { - return user.post(`/groups/${group._id}/chat/message-to-be-flagged/flag`).then(() => { - return admin.get(`/groups/${group._id}/chat`); - }).then((messages) => { - expect(messages).to.have.lengthOf(4); - - let messageThatWasFlagged = messages[0]; - let messageWith1Flag = messages[1]; - let messageWith2Flag = messages[2]; - let messageWithoutFlags = messages[3]; - - expect(messageThatWasFlagged.flagCount).to.eql(1); - expect(messageThatWasFlagged.flags).to.have.property(user._id, true); - - expect(messageWith1Flag.flagCount).to.eql(1); - expect(messageWith1Flag.flags).to.have.property('id1', true); - - expect(messageWith2Flag.flagCount).to.eql(2); - expect(messageWith2Flag.flags).to.have.property('id1', true); - - expect(messageWithoutFlags.flagCount).to.eql(0); - expect(messageWithoutFlags.flags).to.eql({}); - }); - }); - }); - - context('admin flagging a message', () => { - let group, member, message, user; - - beforeEach(async () => { - return createAndPopulateGroup({ - groupDetails: { - type: 'guild', - privacy: 'public', - }, - leaderDetails: { - 'contributor.admin': true, - balance: 10, - }, - members: 1, - }).then((res) => { - group = res.group; - user = res.groupLeader; - member = res.members[0]; - - return member.post(`/groups/${group._id}/chat`, null, { message: 'Group member message' }); - }).then((res) => { - message = res.message; - }); - }); - - it('sets flagCount to 5', async () => { - return user.post(`/groups/${group._id}/chat/${message.id}/flag`).then(() => { - return user.get(`/groups/${group._id}/chat`); - }).then((messages) => { - expect(messages[0].flagCount).to.eql(5); - }); - }); - }); -}); diff --git a/test/api/v2/groups/chat/POST-groups_id_chat_id_like.test.js b/test/api/v2/groups/chat/POST-groups_id_chat_id_like.test.js deleted file mode 100644 index 9c8ff4c586..0000000000 --- a/test/api/v2/groups/chat/POST-groups_id_chat_id_like.test.js +++ /dev/null @@ -1,149 +0,0 @@ -import { - createAndPopulateGroup, - generateUser, - translate as t, -} from '../../../../helpers/api-integration/v2'; - -describe('POST /groups/:id/chat/:id/like', () => { - context('another member\'s message', () => { - let group, member, message, user; - - beforeEach(async () => { - return createAndPopulateGroup({ - groupDetails: { - type: 'guild', - privacy: 'public', - }, - members: 1, - }).then((res) => { - group = res.group; - user = res.groupLeader; - member = res.members[0]; - - return member.post(`/groups/${group._id}/chat`, null, { message: 'Group member message' }); - }).then((res) => { - message = res.message; - }); - }); - - it('likes message', async () => { - return user.post(`/groups/${group._id}/chat/${message.id}/like`).then((messages) => { - expect(messages[0].likes[user._id]).to.eql(true); - }); - }); - - it('returns the message object', async () => { - return user.post(`/groups/${group._id}/chat/${message.id}/like`).then((messages) => { - expect(messages[0].text).to.eql('Group member message'); - expect(messages[0].uuid).to.eql(member._id); - expect(messages[0].user).to.eql(member.profile.name); - }); - }); - }); - - context('own message', () => { - let group, message, user; - - beforeEach(async () => { - return createAndPopulateGroup({ - groupDetails: { - type: 'guild', - privacy: 'public', - members: 1, - }, - }).then((res) => { - group = res.group; - user = res.groupLeader; - - return user.post(`/groups/${group._id}/chat`, null, { message: 'User\'s own message' }); - }).then((res) => { - message = res.message; - }); - }); - - it('cannot like message', async () => { - return expect(user.post(`/groups/${group._id}/chat/${message.id}/like`)) - .to.eventually.be.rejected.and.eql({ - code: 401, - text: t('messageGroupChatLikeOwnMessage'), - }); - }); - }); - - context('group with multiple messages', () => { - let admin, author, group, user; - - beforeEach(async () => { - author = await generateUser(); - admin = await generateUser({ - 'contributor.admin': true, - }); - - let groupData = await createAndPopulateGroup({ - groupDetails: { - type: 'guild', - privacy: 'public', - chat: [ - { id: 'message-to-be-liked', likes: {}, uuid: author._id, flagCount: 0, flags: {} }, - { id: '1-like-message', likes: { id: true }, uuid: author._id, flagCount: 1, flags: { id1: true } }, - { id: '2-like-message', likes: { id: true, id2: true }, uuid: author._id, flagCount: 2, flags: { id1: true, id2: true } }, - { id: 'no-likes', likes: {}, uuid: author._id, flagCount: 0, flags: {} }, - ], - }, - members: 1, - }); - - group = groupData.group; - user = groupData.groupLeader; - }); - - it('changes only the message that is liked', async () => { - return user.post(`/groups/${group._id}/chat/message-to-be-liked/like`).then(() => { - return admin.get(`/groups/${group._id}/chat`); - }).then((messages) => { - expect(messages).to.have.lengthOf(4); - - let messageThatWasLiked = messages[0]; - let messageWith1Like = messages[1]; - let messageWith2Like = messages[2]; - let messageWithoutLike = messages[3]; - - expect(messageThatWasLiked.likes).to.have.property(user._id, true); - - expect(messageWith1Like.flagCount).to.eql(1); - expect(messageWith1Like.flags).to.have.property('id1', true); - - expect(messageWith2Like.flagCount).to.eql(2); - expect(messageWith2Like.flags).to.have.property('id1', true); - expect(messageWith2Like.flags).to.have.property('id2', true); - - expect(messageWithoutLike.flagCount).to.eql(0); - expect(messageWithoutLike.flags).to.eql({}); - }); - }); - }); - - context('nonexistant message', () => { - let group, user; - - beforeEach(async () => { - return createAndPopulateGroup({ - groupDetails: { - type: 'guild', - privacy: 'public', - }, - }).then((res) => { - group = res.group; - user = res.groupLeader; - }); - }); - - it('returns error', async () => { - return expect(user.post(`/groups/${group._id}/chat/non-existant-message/like`)) - .to.eventually.be.rejected.and.eql({ - code: 404, - text: t('messageGroupChatNotFound'), - }); - }); - }); -}); diff --git a/test/api/v2/members/POST-members_id_gift.test.js b/test/api/v2/members/POST-members_id_gift.test.js deleted file mode 100644 index d36306a79d..0000000000 --- a/test/api/v2/members/POST-members_id_gift.test.js +++ /dev/null @@ -1,61 +0,0 @@ -import { - generateUser, -} from '../../../helpers/api-integration/v2'; - -describe('POST /members/id/gift', () => { - let userWithBalance, userWithoutBalance; - - beforeEach(async () => { - userWithBalance = await generateUser({ balance: 10 }); - userWithoutBalance = await generateUser({ balance: 0 }); - }); - - context('send gems from balance', () => { - it('subtracts gems from sender\'s balance and adds it to recipient\'s balance', async () => { - await userWithBalance.post(`/members/${userWithoutBalance._id}/gift`, { - type: 'gems', - gems: { - amount: 1, - }, - }); - - await Promise.all([ - userWithoutBalance.sync(), - userWithBalance.sync(), - ]); - - expect(userWithBalance.balance).to.eql(9.75); - expect(userWithoutBalance.balance).to.eql(0.25); - }); - - it('adds a message to sender\'s inbox', async () => { - expect(userWithBalance.inbox.messages).to.be.empty; - - await userWithBalance.post(`/members/${userWithoutBalance._id}/gift`, { - type: 'gems', - gems: { - amount: 1, - }, - }); - - await userWithBalance.sync(); - - expect(userWithBalance.inbox.messages).to.not.be.empty; - }); - - it('adds a message to recipients\'s inbox', async () => { - expect(userWithoutBalance.inbox.messages).to.be.empty; - - await userWithBalance.post(`/members/${userWithoutBalance._id}/gift`, { - type: 'gems', - gems: { - amount: 1, - }, - }); - - await userWithoutBalance.sync(); - - expect(userWithoutBalance.inbox.messages).to.not.be.empty; - }); - }); -}); diff --git a/test/api/v2/members/POST-members_id_message.test.js b/test/api/v2/members/POST-members_id_message.test.js deleted file mode 100644 index ffbc02266a..0000000000 --- a/test/api/v2/members/POST-members_id_message.test.js +++ /dev/null @@ -1,70 +0,0 @@ -import { - generateUser, -} from '../../../helpers/api-integration/v2'; - -describe('POST /members/id/message', () => { - let sender, recipient; - - beforeEach(async () => { - sender = await generateUser(); - recipient = await generateUser(); - }); - - it('adds the sent message to sender\'s inbox', async () => { - expect(sender.inbox.messages).to.be.empty; - - await sender.post(`/members/${recipient._id}/message`, { - message: 'hello frodo', - }); - - await sender.sync(); - - expect(sender.inbox.messages).to.not.be.empty; - - let messageKey = Object.keys(sender.inbox.messages)[0]; - let message = sender.inbox.messages[messageKey]; - - expect(message.text).to.eql('hello frodo'); - }); - - it('adds a message to recipients\'s inbox', async () => { - expect(recipient.inbox.messages).to.be.empty; - - await sender.post(`/members/${recipient._id}/message`, { - message: 'hello frodo', - }); - - await recipient.sync(); - - expect(recipient.inbox.messages).to.not.be.empty; - - let messageKey = Object.keys(recipient.inbox.messages)[0]; - let message = recipient.inbox.messages[messageKey]; - - expect(message.text).to.eql('hello frodo'); - }); - - it('does not increment the sender\'s new messages field', async () => { - expect(sender.inbox.messages).to.be.empty; - - await sender.post(`/members/${recipient._id}/message`, { - message: 'hello frodo', - }); - - await sender.sync(); - - expect(sender.inbox.newMessages).to.eql(0); - }); - - it('increments the recipient\'s new messages field', async () => { - expect(recipient.inbox.messages).to.be.empty; - - await sender.post(`/members/${recipient._id}/message`, { - message: 'hello frodo', - }); - - await recipient.sync(); - - expect(recipient.inbox.newMessages).to.eql(1); - }); -}); diff --git a/test/api/v2/register/POST-register.test.js b/test/api/v2/register/POST-register.test.js deleted file mode 100644 index 48981c55b2..0000000000 --- a/test/api/v2/register/POST-register.test.js +++ /dev/null @@ -1,293 +0,0 @@ -import { - generateUser, - requester, - translate as t, -} from '../../../helpers/api-integration/v2'; -import { v4 as generateRandomUserName } from 'uuid'; -import { each } from 'lodash'; - -describe('POST /register', () => { - context('username and email are free', () => { - it('registers a new user', async () => { - let api = requester(); - let username = generateRandomUserName(); - let email = `${username}@example.com`; - let password = 'password'; - - return api.post('/register', { - username, - email, - password, - confirmPassword: password, - }).then((user) => { - expect(user._id).to.exist; - expect(user.apiToken).to.exist; - expect(user.auth.local.username).to.eql(username); - }); - }); - - it('requires password and confirmPassword to match', async () => { - let api = requester(); - let username = generateRandomUserName(); - let email = `${username}@example.com`; - let password = 'password'; - let confirmPassword = 'not password'; - - return expect(api.post('/register', { - username, - email, - password, - confirmPassword, - })).to.eventually.be.rejected.and.eql({ - code: 401, - text: t('messageAuthPasswordMustMatch'), - }); - }); - - it('requires a username', async () => { - let api = requester(); - let email = `${generateRandomUserName()}@example.com`; - let password = 'password'; - let confirmPassword = 'password'; - - return expect(api.post('/register', { - email, - password, - confirmPassword, - })).to.eventually.be.rejected.and.eql({ - code: 401, - text: t('messageAuthCredentialsRequired'), - }); - }); - - it('requires an email', async () => { - let api = requester(); - let username = generateRandomUserName(); - let password = 'password'; - let confirmPassword = 'password'; - - return expect(api.post('/register', { - username, - password, - confirmPassword, - })).to.eventually.be.rejected.and.eql({ - code: 401, - text: t('messageAuthCredentialsRequired'), - }); - }); - - it('requires a password', async () => { - let api = requester(); - let username = generateRandomUserName(); - let email = `${username}@example.com`; - let confirmPassword = 'password'; - - return expect(api.post('/register', { - username, - email, - confirmPassword, - })).to.eventually.be.rejected.and.eql({ - code: 401, - text: t('messageAuthCredentialsRequired'), - }); - }); - }); - - context('login is already taken', () => { - let username, email; - beforeEach(async () => { - username = generateRandomUserName(); - email = `${username}@example.com`; - return generateUser({ - 'auth.local.username': username, - 'auth.local.lowerCaseUsername': username, - 'auth.local.email': email, - }); - }); - - it('rejects if username is already taken', async () => { - let api = requester(); - let uniqueEmail = `${generateRandomUserName()}@exampe.com`; - let password = 'password'; - - return expect(api.post('/register', { - username, - email: uniqueEmail, - password, - confirmPassword: password, - })).to.eventually.be.rejected.and.eql({ - code: 401, - text: t('messageAuthUsernameTaken'), - }); - }); - - it('rejects if email is already taken', async () => { - let api = requester(); - let uniqueUsername = generateRandomUserName(); - let password = 'password'; - - return expect(api.post('/register', { - username: uniqueUsername, - email, - password, - confirmPassword: password, - })).to.eventually.be.rejected.and.eql({ - code: 401, - text: t('messageAuthEmailTaken'), - }); - }); - }); - - context('successful login via api', () => { - let api, username, email, password; - - beforeEach(async () => { - api = requester(); - username = generateRandomUserName(); - email = `${username}@example.com`; - password = 'password'; - }); - - it('sets all site tour values to -2 (already seen)', async () => { - return api.post('/register', { - username, - email, - password, - confirmPassword: password, - }).then((user) => { - expect(user.flags.tour).to.not.be.empty; - - each(user.flags.tour, (value) => { - expect(value).to.eql(-2); - }); - }); - }); - - it('populates user with default todos, not no other task types', async () => { - return api.post('/register', { - username, - email, - password, - confirmPassword: password, - }).then((user) => { - expect(user.todos).to.not.be.empty; - expect(user.dailys).to.be.empty; - expect(user.habits).to.be.empty; - expect(user.rewards).to.be.empty; - }); - }); - - it('populates user with default tags', async () => { - return api.post('/register', { - username, - email, - password, - confirmPassword: password, - }).then((user) => { - expect(user.tags).to.not.be.empty; - }); - }); - }); - - context('successful login with habitica-web header', () => { - let api, username, email, password; - - beforeEach(async () => { - api = requester({}, {'x-client': 'habitica-web'}); - username = generateRandomUserName(); - email = `${username}@example.com`; - password = 'password'; - }); - - it('sets all common tutorial flags to true', async () => { - return api.post('/register', { - username, - email, - password, - confirmPassword: password, - }).then((user) => { - expect(user.flags.tour).to.not.be.empty; - - each(user.flags.tutorial.common, (value) => { - expect(value).to.eql(true); - }); - }); - }); - - it('populates user with default todos, habits, and rewards', async () => { - return api.post('/register', { - username, - email, - password, - confirmPassword: password, - }).then((user) => { - expect(user.todos).to.not.be.empty; - expect(user.dailys).to.be.empty; - expect(user.habits).to.not.be.empty; - expect(user.rewards).to.not.be.empty; - }); - }); - - it('populates user with default tags', async () => { - return api.post('/register', { - username, - email, - password, - confirmPassword: password, - }).then((user) => { - expect(user.tags).to.not.be.empty; - }); - }); - }); - - context('successful login with habitica-android header', () => { - let api, username, email, password; - - beforeEach(async () => { - api = requester({}, {'x-client': 'habitica-android'}); - username = generateRandomUserName(); - email = `${username}@example.com`; - password = 'password'; - }); - - it('sets all common tutorial flags to true', async () => { - return api.post('/register', { - username, - email, - password, - confirmPassword: password, - }).then((user) => { - expect(user.flags.tour).to.not.be.empty; - - each(user.flags.tutorial.common, (value) => { - expect(value).to.eql(true); - }); - }); - }); - - it('populates user with default todos, habits, and rewards', async () => { - return api.post('/register', { - username, - email, - password, - confirmPassword: password, - }).then((user) => { - expect(user.todos).to.not.be.empty; - expect(user.dailys).to.be.empty; - expect(user.habits).to.not.be.empty; - expect(user.rewards).to.not.be.empty; - }); - }); - - it('populates user with default tags', async () => { - return api.post('/register', { - username, - email, - password, - confirmPassword: password, - }).then((user) => { - expect(user.tags).to.not.be.empty; - }); - }); - }); -}); diff --git a/test/api/v2/status/GET-status.test.js b/test/api/v2/status/GET-status.test.js deleted file mode 100644 index 6aac4346a1..0000000000 --- a/test/api/v2/status/GET-status.test.js +++ /dev/null @@ -1,9 +0,0 @@ -import {requester} from '../../../helpers/api-integration/v2'; - -describe('Status', () => { - it('returns a status of up when server is up', async () => { - let api = requester(); - - await expect(api.get('/status')).to.eventually.eql({status: 'up'}); - }); -}); diff --git a/test/api/v2/user/DELETE-user.test.js b/test/api/v2/user/DELETE-user.test.js deleted file mode 100644 index 8d28a07b78..0000000000 --- a/test/api/v2/user/DELETE-user.test.js +++ /dev/null @@ -1,186 +0,0 @@ -import { - checkExistence, - createAndPopulateGroup, - generateGroup, - generateUser, -} from '../../../helpers/api-integration/v2'; -import { - find, - map, -} from 'lodash'; -import Bluebird from 'bluebird'; - -describe('DELETE /user', () => { - let user; - - beforeEach(async () => { - user = await generateUser(); - }); - - it('deletes the user', async () => { - return expect(user.del('/user').then(() => { - return checkExistence('users', user._id); - })).to.eventually.eql(false); - }); - - it('deletes the user\'s tasks', async () => { - // gets the user's todos ids - let ids = user.todos.map(todo => todo._id); - expect(ids.length).to.be.above(0); // make sure the user has some task to delete - - await user.del('/user'); - - await Bluebird.all(map(ids, id => { - return expect(checkExistence('tasks', id)).to.eventually.eql(false); - })); - }); - - context('user has active subscription', () => { - it('does not delete account'); - }); - - context('last member of a party', () => { - let party; - - beforeEach(async () => { - return generateGroup(user, { - type: 'party', - privacy: 'private', - }).then((group) => { - party = group; - }); - }); - - it('deletes party when user is the only member', async () => { - await user.del('/user'); - await expect(checkExistence('groups', party._id)).to.eventually.eql(false); - }); - }); - - context('last member of a private guild', () => { - let guild, lastMember; - - beforeEach(async () => { - let { - groupLeader, - group, - } = await createAndPopulateGroup({ - type: 'guild', - privacy: 'private', - }); - - guild = group; - lastMember = groupLeader; - }); - - it('deletes guild when user is the only member', async () => { - await lastMember.del('/user'); - await expect(checkExistence('groups', guild._id)).to.eventually.eql(false); - }); - }); - - context('groups user is leader of', () => { - let group, oldLeader, newLeader; - - beforeEach(async () => { - return createAndPopulateGroup({ - groupDetails: { - type: 'guild', - privacy: 'public', - }, - members: 3, - }).then((res) => { - group = res.group; - newLeader = res.members[0]; - oldLeader = res.groupLeader; - }); - }); - - it('chooses new group leader for any group user was the leader of', async () => { - return oldLeader.del('/user').then(() => { - return newLeader.get(`/groups/${group._id}`); - }).then((guild) => { - expect(guild.leader).to.exist; - expect(guild.leader._id).to.not.eql(oldLeader._id); - }); - }); - }); - - context('groups user is a part of', () => { - let group1, group2, userToDelete, otherUser; - - beforeEach(async () => { - return generateUser({ - balance: 10, - }).then((_user) => { - userToDelete = _user; - - return generateGroup(userToDelete, { - type: 'guild', - privacy: 'public', - }); - }).then((newGroup) => { - group1 = newGroup; - - return createAndPopulateGroup({ - groupDetails: { - type: 'guild', - privacy: 'public', - }, - members: 3, - }); - }).then((res) => { - group2 = res.group; - otherUser = res.members[0]; - - return userToDelete.post(`/groups/${group2._id}/join`); - }); - }); - - it('removes user from all groups user was a part of', async () => { - return userToDelete.del('/user').then(() => { - return otherUser.get(`/groups/${group1._id}`); - }).then((fetchedGroup1) => { - expect(fetchedGroup1.members).to.be.empty; - - return otherUser.get(`/groups/${group2._id}`); - }).then((fetchedGroup2) => { - expect(fetchedGroup2.members).to.not.be.empty; - - let userInGroup = find(fetchedGroup2.members, (member) => { - return member._id === userToDelete._id; - }); - - expect(userInGroup).to.not.be.ok; - }); - }); - }); - - context('pending invitation to group', () => { - let group, userToDelete, otherUser; - - beforeEach(async () => { - return createAndPopulateGroup({ - groupDetails: { - type: 'guild', - privacy: 'public', - }, - members: 3, - invites: 2, - }).then((res) => { - group = res.group; - otherUser = res.members[0]; - userToDelete = res.invitees[0]; - }); - }); - - it('removes invitations from groups', async () => { - return userToDelete.del('/user').then(() => { - return otherUser.get(`/groups/${group._id}`); - }).then((fetchedGroup) => { - expect(fetchedGroup.invites).to.have.a.lengthOf(1); - expect(fetchedGroup.invites[0]._id).to.not.eql(userToDelete._id); - }); - }); - }); -}); diff --git a/test/api/v2/user/GET-user.test.js b/test/api/v2/user/GET-user.test.js deleted file mode 100644 index c1e22d020a..0000000000 --- a/test/api/v2/user/GET-user.test.js +++ /dev/null @@ -1,28 +0,0 @@ -import { - generateUser, -} from '../../../helpers/api-integration/v2'; - -describe('GET /user', () => { - let user; - - before(async () => { - let usr = await generateUser(); - user = await usr.get('/user'); - }); - - it('gets the user object', async () => { - expect(user._id).to.eql(user._id); - expect(user.auth.local.username).to.eql(user.auth.local.username); - expect(user.todos).to.eql(user.todos); - expect(user.items).to.eql(user.items); - }); - - it('does not include password information', async () => { - expect(user.auth.local.hashed_password).to.not.exist; - expect(user.auth.local.salt).to.not.exist; - }); - - it('does not include api token', async () => { - expect(user.apiToken).to.not.exist; - }); -}); diff --git a/test/api/v2/user/GET-user_tags.test.js b/test/api/v2/user/GET-user_tags.test.js deleted file mode 100644 index fd2032dc96..0000000000 --- a/test/api/v2/user/GET-user_tags.test.js +++ /dev/null @@ -1,16 +0,0 @@ -import { - generateUser, -} from '../../../helpers/api-integration/v2'; - -describe('GET /user/tags', () => { - let user; - - beforeEach(async () => { - user = await generateUser(); - }); - - it('gets the user\'s tags', async () => { - return expect(user.get('/user/tags')) - .to.eventually.eql(user.tags); - }); -}); diff --git a/test/api/v2/user/GET-user_tags_id.test.js b/test/api/v2/user/GET-user_tags_id.test.js deleted file mode 100644 index 9c774c84b6..0000000000 --- a/test/api/v2/user/GET-user_tags_id.test.js +++ /dev/null @@ -1,25 +0,0 @@ -import { - generateUser, - translate as t, -} from '../../../helpers/api-integration/v2'; - -describe('GET /user/tags/id', () => { - let user; - - beforeEach(async () => { - user = await generateUser(); - }); - - it('gets a user\'s tag by id', async () => { - return expect(user.get(`/user/tags/${user.tags[0].id}`)) - .to.eventually.eql(user.tags[0]); - }); - - it('fails for non-existent tags', async () => { - return expect(user.get('/user/tags/not-an-id')) - .to.eventually.be.rejected.and.eql({ - code: 404, - text: t('messageTagNotFound'), - }); - }); -}); diff --git a/test/api/v2/user/PUT-user.test.js b/test/api/v2/user/PUT-user.test.js deleted file mode 100644 index e4774528ae..0000000000 --- a/test/api/v2/user/PUT-user.test.js +++ /dev/null @@ -1,201 +0,0 @@ -import { - generateUser, - translate as t, -} from '../../../helpers/api-integration/v2'; - -import { each, get } from 'lodash'; - -describe('PUT /user', () => { - let user; - - beforeEach(async () => { - user = await generateUser(); - }); - - context('Allowed Operations', () => { - it('updates the user', async () => { - await user.put('/user', { - 'profile.name': 'Frodo', - 'preferences.costume': true, - 'stats.hp': 14, - }); - - await user.sync(); - - expect(user.profile.name).to.eql('Frodo'); - expect(user.preferences.costume).to.eql(true); - expect(user.stats.hp).to.eql(14); - }); - }); - - context('Top Level Protected Operations', () => { - let protectedOperations = { - 'gem balance': {balance: 100}, - auth: {'auth.blocked': true, 'auth.timestamps.created': new Date()}, - contributor: {'contributor.level': 9, 'contributor.admin': true, 'contributor.text': 'some text'}, - backer: {'backer.tier': 10, 'backer.npc': 'Bilbo'}, - subscriptions: {'purchased.plan.extraMonths': 500, 'purchased.plan.consecutive.trinkets': 1000}, - 'customization gem purchases': {'purchased.background.tavern': true, 'purchased.skin.bear': true}, - tasks: {todos: [], habits: [], dailys: [], rewards: []}, - }; - - each(protectedOperations, (data, testName) => { - it(`does not allow updating ${testName}`, async () => { - let errorText = []; - each(data, (value, operation) => { - errorText.push(t('messageUserOperationProtected', { operation })); - }); - - await expect(user.put('/user', data)).to.eventually.be.rejected.and.eql({ - code: 401, - text: errorText, - }); - }); - }); - }); - - context('Sub-Level Protected Operations', () => { - let protectedOperations = { - 'class stat': {'stats.class': 'wizard'}, - }; - - each(protectedOperations, (data, testName) => { - it(`does not allow updating ${testName}`, async () => { - let errorText = []; - each(data, (value, operation) => { - errorText.push(t('messageUserOperationProtected', { operation })); - }); - - await expect(user.put('/user', data)).to.eventually.be.rejected.and.eql({ - code: 401, - text: errorText, - }); - }); - }); - }); - - context('Default Appearance Preferences', () => { - let testCases = { - shirt: 'yellow', - skin: 'ddc994', - 'hair.color': 'blond', - 'hair.bangs': 2, - 'hair.base': 1, - 'hair.flower': 4, - size: 'broad', - }; - - each(testCases, (item, type) => { - const update = {}; - update[`preferences.${type}`] = item; - - it(`updates user with ${type} that is a default`, async () => { - let dbUpdate = {}; - dbUpdate[`purchased.${type}.${item}`] = true; - await user.update(dbUpdate); - - // Sanity checks to make sure user is not already equipped with item - expect(get(user.preferences, type)).to.not.eql(item); - - let updatedUser = await user.put('/user', update); - - expect(get(updatedUser.preferences, type)).to.eql(item); - }); - }); - - it('returns an error if user tries to update body size with invalid type', async () => { - await expect(user.put('/user', { - 'preferences.size': 'round', - })).to.eventually.be.rejected.and.eql({ - code: 401, - text: ['Must purchase round to set it on preferences.size'], - }); - }); - - it('can set beard to default', async () => { - await user.update({ - 'purchased.hair.beard': 3, - 'preferences.hair.beard': 3, - }); - - let updatedUser = await user.put('/user', { - 'preferences.hair.beard': 0, - }); - - expect(updatedUser.preferences.hair.beard).to.eql(0); - }); - - it('can set mustache to default', async () => { - await user.update({ - 'purchased.hair.mustache': 2, - 'preferences.hair.mustache': 2, - }); - - let updatedUser = await user.put('/user', { - 'preferences.hair.mustache': 0, - }); - - expect(updatedUser.preferences.hair.mustache).to.eql(0); - }); - }); - - context('Purchasable Appearance Preferences', () => { - let testCases = { - background: 'volcano', - shirt: 'convict', - skin: 'cactus', - 'hair.base': 7, - 'hair.beard': 2, - 'hair.color': 'rainbow', - 'hair.mustache': 2, - }; - - each(testCases, (item, type) => { - const update = {}; - update[`preferences.${type}`] = item; - - it(`returns an error if user tries to update ${type} with ${type} the user does not own`, async () => { - await expect(user.put('/user', update)).to.eventually.be.rejected.and.eql({ - code: 401, - text: [`Must purchase ${item} to set it on preferences.${type}`], - }); - }); - - it(`updates user with ${type} user does own`, async () => { - let dbUpdate = {}; - dbUpdate[`purchased.${type}.${item}`] = true; - await user.update(dbUpdate); - - // Sanity check to make sure user is not already equipped with item - expect(get(user.preferences, type)).to.not.eql(item); - - let updatedUser = await user.put('/user', update); - - expect(get(updatedUser.preferences, type)).to.eql(item); - }); - }); - }); - - context('Improvement Categories', () => { - it('sets valid categories', async () => { - await user.put('/user', { - 'preferences.improvementCategories': ['work', 'school'], - }); - - await user.sync(); - - expect(user.preferences.improvementCategories).to.eql(['work', 'school']); - }); - - it('discards invalid categories', async () => { - await expect(user.put('/user', { - 'preferences.improvementCategories': ['work', 'procrastination', 'school'], - })).to.eventually.be.rejected.and.eql({ - code: 400, - text: [ - 'Validator failed for path `preferences.improvementCategories` with value `work,procrastination,school`', - ], - }); - }); - }); -}); diff --git a/test/api/v2/user/anonymized/GET-user_anonymized.test.js b/test/api/v2/user/anonymized/GET-user_anonymized.test.js deleted file mode 100644 index 3bfb4d1dcb..0000000000 --- a/test/api/v2/user/anonymized/GET-user_anonymized.test.js +++ /dev/null @@ -1,98 +0,0 @@ -import { - generateUser, -} from '../../../../helpers/api-integration/v2'; -import { each } from 'lodash'; - -describe('GET /user/anonymized', () => { - let user, anonymizedUser; - - before(async () => { - user = await generateUser({ - 'inbox.messages': { - 'the-message-id': { - sort: 214, - user: 'Some user', - backer: {}, - contributor: { - text: 'Blacksmith', - level: 2, - contributions: 'Made some contributions', - admin: false, - }, - uuid: 'some-users-uuid', - flagCount: 0, - flags: {}, - likes: {}, - timestamp: 1444154258699.0000000000000000, - text: 'Lorem ipsum', - id: 'the-messages-id', - sent: true, - }, - }, - }); - - await user.post('/user/tasks', { - text: 'some private text', - notes: 'some private notes', - checklist: [ - {text: 'a private checklist'}, - {text: 'another private checklist'}, - ], - type: 'daily', - }); - - anonymizedUser = await user.get('/user/anonymized'); - }); - - it('retains user id', async () => { - expect(anonymizedUser._id).to.eql(user._id); - }); - - it('removes credentials and financial information', async () => { - expect(anonymizedUser.apiToken).to.not.exist; - expect(anonymizedUser.auth.local).to.not.exist; - expect(anonymizedUser.auth.facebook).to.not.exist; - expect(anonymizedUser.purchased.plan).to.not.exist; - }); - - it('removes profile information', async () => { - expect(anonymizedUser.profile).to.not.exist; - expect(anonymizedUser.contributor).to.not.exist; - expect(anonymizedUser.achievements.challenges).to.not.exist; - }); - - it('removes social information', async () => { - expect(anonymizedUser.newMessages).to.not.exist; - expect(anonymizedUser.invitations).to.not.exist; - expect(anonymizedUser.items.special.nyeReceived).to.not.exist; - expect(anonymizedUser.items.special.valentineReceived).to.not.exist; - - each(anonymizedUser.inbox.messages, (msg) => { - expect(msg.text).to.eql('inbox message text'); - }); - }); - - it('anonymizes task info', async () => { - each(['habits', 'todos', 'dailys', 'rewards'], (tasks) => { - each(anonymizedUser[tasks], (task) => { - expect(task.text).to.eql('task text'); - expect(task.notes).to.eql('task notes'); - - each(task.checklist, (box) => { - expect(box.text).to.match(/item\d*/); - }); - }); - }); - }); - - it('anonymizes tags', async () => { - each(anonymizedUser.tags, (tag) => { - expect(tag.name).to.eql('tag'); - expect(tag.challenge).to.eql('challenge'); - }); - }); - - it('removes webhooks', async () => { - expect(anonymizedUser.webhooks).to.not.exist; - }); -}); diff --git a/test/api/v2/user/batch-update/POST-user_batch-update.test.js b/test/api/v2/user/batch-update/POST-user_batch-update.test.js deleted file mode 100644 index f64cbc7f7b..0000000000 --- a/test/api/v2/user/batch-update/POST-user_batch-update.test.js +++ /dev/null @@ -1,62 +0,0 @@ -import { - generateUser, - translate as t, -} from '../../../../helpers/api-integration/v2'; - -import { each } from 'lodash'; - -describe('POST /user/batch-update', () => { - let user; - - beforeEach(async () => { - user = await generateUser(); - }); - - context('allowed operations', () => { - it('makes batch operations', async () => { - let task = (await user.get('/user/tasks'))[0]; - - let updatedUser = await user.post('/user/batch-update', [ - {op: 'update', body: {'stats.hp': 30}}, - {op: 'update', body: {'profile.name': 'Samwise'}}, - {op: 'score', params: { direction: 'up', id: task.id }}, - ]); - - expect(updatedUser.stats.hp).to.eql(30); - expect(updatedUser.profile.name).to.eql('Samwise'); - - let fetchedTask = await user.get(`/user/tasks/${task.id}`); - - expect(fetchedTask.value).to.be.greaterThan(task.value); - }); - }); - - xcontext('development only operations', () => { // These tests will fail if your NODE_ENV is set to 'development' instead of 'testing' - let protectedOperations = { - 'Add Ten Gems': 'addTenGems', - 'Add Hourglass': 'addHourglass', - }; - - each(protectedOperations, (operation, description) => { - it(`it sends back a 500 error for ${description} operation`, async () => { - return expect(user.post('/user/batch-update', [ - { op: operation }, - ])).to.eventually.be.rejected.and.eql({ - code: 500, - text: t('messageUserOperationNotFound', { operation }), - }); - }); - }); - }); - - context('unknown operations', () => { - it('sends back a 500 error', async () => { - return expect(user.post('/user/batch-update', [ - {op: 'aNotRealOperation'}, - ])).to.eventually.be.rejected.and.eql({ - code: 500, - text: t('messageUserOperationNotFound', { operation: 'aNotRealOperation' }), - }); - }); - }); -}); diff --git a/test/api/v2/user/pushDevice/POST-pushDevice.test.js b/test/api/v2/user/pushDevice/POST-pushDevice.test.js deleted file mode 100644 index c0b5e9be72..0000000000 --- a/test/api/v2/user/pushDevice/POST-pushDevice.test.js +++ /dev/null @@ -1,24 +0,0 @@ -import { - generateUser, -} from '../../../../helpers/api-integration/v2'; - -xdescribe('POST /user/pushDevice', () => { - let user; - - beforeEach(async () => { - user = await generateUser(); - }); - - it('registers a device id', async () => { - return user.post('/user/pushDevice', { - regId: '123123', - type: 'android', - }).then((devices) => { - let device = devices[0]; - - expect(device._id).to.exist; - expect(device.regId).to.eql('123123'); - expect(device.type).to.eql('android'); - }); - }); -}); diff --git a/test/api/v2/user/tasks/DELETE-tasks_id.test.js b/test/api/v2/user/tasks/DELETE-tasks_id.test.js deleted file mode 100644 index 68eb20faef..0000000000 --- a/test/api/v2/user/tasks/DELETE-tasks_id.test.js +++ /dev/null @@ -1,40 +0,0 @@ -import { - generateUser, - translate as t, -} from '../../../../helpers/api-integration/v2'; - -describe('DELETE /user/tasks/:id', () => { - let user, task; - - beforeEach(async () => { - user = await generateUser(); - task = user.todos[0]; - }); - - it('deletes a task', async () => { - await user.del(`/user/tasks/${task.id}`); - - await expect(user.get(`/user/tasks/${task.id}`)).to.eventually.be.rejected.and.eql({ - code: 404, - text: t('messageTaskNotFound'), - }); - }); - - it('returns an error if the task does not exist', async () => { - return expect(user.del('/user/tasks/task-that-does-not-exist')) - .to.eventually.be.rejected.and.eql({ - code: 404, - text: t('messageTaskNotFound'), - }); - }); - - it('does not delete another user\'s task', async () => { - return expect(generateUser().then((otherUser) => { - let otherUsersTask = otherUser.todos[0]; - return user.del(`/user/tasks/${otherUsersTask.id}`); - })).to.eventually.be.rejected.and.eql({ - code: 404, - text: 'Task not found.', - }); - }); -}); diff --git a/test/api/v2/user/tasks/GET-tasks.test.js b/test/api/v2/user/tasks/GET-tasks.test.js deleted file mode 100644 index 1506f4c2f0..0000000000 --- a/test/api/v2/user/tasks/GET-tasks.test.js +++ /dev/null @@ -1,25 +0,0 @@ -import { - generateUser, -} from '../../../../helpers/api-integration/v2'; - -describe('GET /user/tasks/', () => { - let user; - - beforeEach(async () => { - return generateUser().then((_user) => { - user = _user; - }); - }); - - it('gets all tasks', async () => { - return user.get('/user/tasks/').then((tasks) => { - expect(tasks).to.be.an('array'); - expect(tasks.length).to.equal(1); - - let task = tasks[0]; - expect(task.id).to.exist; - expect(task.type).to.exist; - expect(task.text).to.exist; - }); - }); -}); diff --git a/test/api/v2/user/tasks/GET-tasks_id.test.js b/test/api/v2/user/tasks/GET-tasks_id.test.js deleted file mode 100644 index cd9e1e73be..0000000000 --- a/test/api/v2/user/tasks/GET-tasks_id.test.js +++ /dev/null @@ -1,42 +0,0 @@ -import { - generateUser, - translate as t, -} from '../../../../helpers/api-integration/v2'; - -describe('GET /user/tasks/:id', () => { - let user, task; - - beforeEach(async () => { - user = await generateUser(); - task = user.todos[0]; - }); - - it('gets a task', async () => { - return user.get(`/user/tasks/${task.id}`).then((foundTask) => { - expect(foundTask.id).to.eql(task.id); - expect(foundTask.text).to.eql(task.text); - expect(foundTask.notes).to.eql(task.notes); - expect(foundTask.value).to.eql(task.value); - expect(foundTask.type).to.eql(task.type); - }); - }); - - it('returns an error if the task does not exist', async () => { - return expect(user.get('/user/tasks/task-that-does-not-exist')) - .to.eventually.be.rejected.and.eql({ - code: 404, - text: t('messageTaskNotFound'), - }); - }); - - it('does not get another user\'s task', async () => { - return expect(generateUser().then((otherUser) => { - let otherUsersTask = otherUser.todos[0]; - - return user.get(`/user/tasks/${otherUsersTask.id}`); - })).to.eventually.be.rejected.and.eql({ - code: 404, - text: t('messageTaskNotFound'), - }); - }); -}); diff --git a/test/api/v2/user/tasks/POST-clear-completed.test.js b/test/api/v2/user/tasks/POST-clear-completed.test.js deleted file mode 100644 index 40e6cbd5cf..0000000000 --- a/test/api/v2/user/tasks/POST-clear-completed.test.js +++ /dev/null @@ -1,26 +0,0 @@ -import { - generateUser, -} from '../../../../helpers/api-integration/v2'; - -describe('POST /user/tasks/clear-completed', () => { - let user; - - beforeEach(async () => { - return generateUser().then((_user) => { - user = _user; - }); - }); - - it('removes all completed todos', async () => { - let toComplete = await user.post('/user/tasks', { - type: 'todo', - text: 'done', - }); - - await user.post(`/user/tasks/${toComplete._id}/up`); - - let todos = await user.get('/user/tasks?type=todo'); - let uncomplete = await user.post('/user/tasks/clear-completed'); - expect(todos.length).to.equal(uncomplete.length + 1); - }); -}); diff --git a/test/api/v2/user/tasks/POST-tasks.test.js b/test/api/v2/user/tasks/POST-tasks.test.js deleted file mode 100644 index 4fe4c9f5ea..0000000000 --- a/test/api/v2/user/tasks/POST-tasks.test.js +++ /dev/null @@ -1,66 +0,0 @@ -import { - generateUser, - translate as t, -} from '../../../../helpers/api-integration/v2'; - -describe('POST /user/tasks', () => { - let user; - - beforeEach(async () => { - user = await generateUser(); - }); - - it('creates a task', async () => { - return user.post('/user/tasks').then((task) => { - expect(task.id).to.exist; - }); - }); - - it('creates a habit by default', async () => { - return expect(user.post('/user/tasks')) - .to.eventually.have.property('type', 'habit'); - }); - - it('creates a task with specified values', async () => { - return user.post('/user/tasks', { - type: 'daily', - text: 'My task', - notes: 'My notes', - frequency: 'daily', - }).then((task) => { - expect(task.type).to.eql('daily'); - expect(task.text).to.eql('My task'); - expect(task.notes).to.eql('My notes'); - expect(task.frequency).to.eql('daily'); - }); - }); - - xit('does not create a task with an id that already exists', async () => { - let todo = user.todos[0]; - - return expect(user.post('/user/tasks', { - id: todo.id, - })).to.eventually.be.rejected.and.eql({ - code: 409, - text: t('messageDuplicateTaskID'), - }); - }); - - xit('TODO: no error is thrown - throws a 500 validation error if invalid type is posted', async () => { - return expect(user.post('/user/tasks', { - type: 'not-valid', - })).to.eventually.be.rejected.and.eql({ - code: 500, - text: 'Cannot call method \'indexOf\' of undefined', - }); - }); - - xit('TODO: no error is thrown - throws a 500 validation error if invalid data is posted', async () => { - return expect(user.post('/user/tasks', { - frequency: 'not-valid', - })).to.eventually.be.rejected.and.eql({ - code: 500, - text: 'Task validation failed', - }); - }); -}); diff --git a/test/api/v2/user/tasks/PUT-tasks_id.test.js b/test/api/v2/user/tasks/PUT-tasks_id.test.js deleted file mode 100644 index ee41a4fe68..0000000000 --- a/test/api/v2/user/tasks/PUT-tasks_id.test.js +++ /dev/null @@ -1,64 +0,0 @@ -import { - generateUser, -} from '../../../../helpers/api-integration/v2'; - -describe('PUT /user/tasks/:id', () => { - let user, task; - - beforeEach(async () => { - user = await generateUser(); - task = user.todos[0]; - }); - - it('does not update the id of the task', async () => { - return user.put(`/user/tasks/${task.id}`, { - id: 'some-thing', - }).then((updatedTask) => { - expect(updatedTask.id).to.eql(task.id); - expect(updatedTask.id).to.not.eql('some-thing'); - }); - }); - - it('does not update the type of the task', async () => { - return user.put(`/user/tasks/${task.id}`, { - type: 'habit', - }).then((updatedTask) => { - expect(updatedTask.type).to.eql(task.type); - expect(updatedTask.type).to.not.eql('habit'); - }); - }); - - it('updates text, attribute, priority and notes', async () => { - return user.put(`/user/tasks/${task.id}`, { - text: 'new text', - notes: 'new notes', - priority: 0.1, - attribute: 'str', - }).then((updatedTask) => { - expect(updatedTask.text).to.eql('new text'); - expect(updatedTask.notes).to.eql('new notes'); - expect(updatedTask.priority).to.eql(0.1); - expect(updatedTask.attribute).to.eql('str'); - }); - }); - - it('returns an error if the task does not exist', async () => { - return expect(user.put('/user/tasks/task-id-that-does-not-exist')) - .to.eventually.be.rejected.and.eql({ - code: 404, - text: 'Task not found.', - }); - }); - - it('does not update another user\'s task', async () => { - return expect(generateUser().then((otherUser) => { - let otherUsersTask = otherUser.todos[0]; - return user.put(`/user/tasks/${otherUsersTask._id}`, { - name: 'some name', - }); - })).to.eventually.be.rejected.and.eql({ - code: 404, - text: 'Task not found.', - }); - }); -}); diff --git a/test/api/v3/integration/challenges/GET-challenges_challengeId.test.js b/test/api/v3/integration/challenges/GET-challenges_challengeId.test.js index 33b329300a..4bbbd001ba 100644 --- a/test/api/v3/integration/challenges/GET-challenges_challengeId.test.js +++ b/test/api/v3/integration/challenges/GET-challenges_challengeId.test.js @@ -46,7 +46,14 @@ describe('GET /challenges/:challengeId', () => { id: groupLeader._id, profile: {name: groupLeader.profile.name}, }); - expect(chal.group).to.eql(_.pick(group, ['_id', 'id', 'name', 'type', 'privacy'])); + expect(chal.group).to.eql({ + _id: group._id, + id: group.id, + name: group.name, + type: group.type, + privacy: group.privacy, + leader: groupLeader.id, + }); }); }); @@ -91,7 +98,14 @@ describe('GET /challenges/:challengeId', () => { id: groupLeader._id, profile: {name: groupLeader.profile.name}, }); - expect(chal.group).to.eql(_.pick(group, ['_id', 'id', 'name', 'type', 'privacy'])); + expect(chal.group).to.eql({ + _id: group._id, + id: group.id, + name: group.name, + type: group.type, + privacy: group.privacy, + leader: groupLeader.id, + }); }); }); @@ -136,7 +150,14 @@ describe('GET /challenges/:challengeId', () => { id: groupLeader.id, profile: {name: groupLeader.profile.name}, }); - expect(chal.group).to.eql(_.pick(group, ['_id', 'id', 'name', 'type', 'privacy'])); + expect(chal.group).to.eql({ + _id: group._id, + id: group.id, + name: group.name, + type: group.type, + privacy: group.privacy, + leader: groupLeader.id, + }); }); }); }); diff --git a/test/api/v3/integration/challenges/GET-challenges_user.test.js b/test/api/v3/integration/challenges/GET-challenges_user.test.js index b46367f46f..7379718412 100644 --- a/test/api/v3/integration/challenges/GET-challenges_user.test.js +++ b/test/api/v3/integration/challenges/GET-challenges_user.test.js @@ -45,6 +45,7 @@ describe('GET challenges/user', () => { type: publicGuild.type, privacy: publicGuild.privacy, name: publicGuild.name, + leader: publicGuild.leader._id, }); }); @@ -64,6 +65,7 @@ describe('GET challenges/user', () => { type: publicGuild.type, privacy: publicGuild.privacy, name: publicGuild.name, + leader: publicGuild.leader._id, }); let foundChallenge2 = _.find(challenges, { _id: challenge2._id }); expect(foundChallenge2).to.exist; @@ -78,6 +80,7 @@ describe('GET challenges/user', () => { type: publicGuild.type, privacy: publicGuild.privacy, name: publicGuild.name, + leader: publicGuild.leader._id, }); }); @@ -97,6 +100,7 @@ describe('GET challenges/user', () => { type: publicGuild.type, privacy: publicGuild.privacy, name: publicGuild.name, + leader: publicGuild.leader._id, }); let foundChallenge2 = _.find(challenges, { _id: challenge2._id }); expect(foundChallenge2).to.exist; @@ -111,6 +115,7 @@ describe('GET challenges/user', () => { type: publicGuild.type, privacy: publicGuild.privacy, name: publicGuild.name, + leader: publicGuild.leader._id, }); }); diff --git a/test/api/v3/integration/emails/GET-email-unsubscribe.test.js b/test/api/v3/integration/emails/GET-email-unsubscribe.test.js index 1bd3a532fa..cda83e78e3 100644 --- a/test/api/v3/integration/emails/GET-email-unsubscribe.test.js +++ b/test/api/v3/integration/emails/GET-email-unsubscribe.test.js @@ -2,7 +2,7 @@ import { generateUser, translate as t, } from '../../../../helpers/api-v3-integration.helper'; -import { encrypt } from '../../../../../website/server/libs/api-v3/encryption'; +import { encrypt } from '../../../../../website/server/libs/encryption'; import { v4 as generateUUID } from 'uuid'; describe('GET /email/unsubscribe', () => { diff --git a/test/api/v3/integration/groups/GET-groups_groupId_members.test.js b/test/api/v3/integration/groups/GET-groups_groupId_members.test.js index 5827de782d..b38a0d35c5 100644 --- a/test/api/v3/integration/groups/GET-groups_groupId_members.test.js +++ b/test/api/v3/integration/groups/GET-groups_groupId_members.test.js @@ -4,12 +4,21 @@ import { translate as t, } from '../../../../helpers/api-v3-integration.helper'; import { v4 as generateUUID } from 'uuid'; +import common from '../../../../../common'; describe('GET /groups/:groupId/members', () => { let user; beforeEach(async () => { - user = await generateUser(); + user = await generateUser({ + balance: 10, + contributor: {level: 1}, + backer: {tier: 3}, + preferences: { + costume: false, + background: 'volcano', + }, + }); }); it('validates optional req.query.lastId to be an UUID', async () => { @@ -57,6 +66,30 @@ describe('GET /groups/:groupId/members', () => { expect(res[0].profile).to.have.all.keys(['name']); }); + it('req.query.includeAllPublicFields === true only works with parties', async () => { + let group = await generateGroup(user, {type: 'guild', name: generateUUID()}); + let res = await user.get(`/groups/${group._id}/members?includeAllPublicFields=true`); + expect(res[0]).to.have.all.keys(['_id', 'id', 'profile']); + expect(res[0].profile).to.have.all.keys(['name']); + }); + + it('populates all public fields if req.query.includeAllPublicFields === true and it is a party', async () => { + await generateGroup(user, {type: 'party', name: generateUUID()}); + let [memberRes] = await user.get('/groups/party/members?includeAllPublicFields=true'); + + expect(memberRes).to.have.all.keys([ // works as: object has all and only these keys + '_id', 'id', 'preferences', 'profile', 'stats', 'achievements', 'party', + 'backer', 'contributor', 'auth', 'items', + ]); + expect(Object.keys(memberRes.auth)).to.eql(['timestamps']); + expect(Object.keys(memberRes.preferences).sort()).to.eql(['size', 'hair', 'skin', 'shirt', + 'chair', 'costume', 'sleep', 'background'].sort()); + + expect(memberRes.stats.maxMP).to.exists; + expect(memberRes.stats.maxHealth).to.equal(common.maxHealth); + expect(memberRes.stats.toNextLevel).to.equal(common.tnl(memberRes.stats.lvl)); + }); + it('returns only first 30 members', async () => { let group = await generateGroup(user, {type: 'party', name: generateUUID()}); diff --git a/test/api/v3/integration/groups/POST-groups_id_removeMember.test.js b/test/api/v3/integration/groups/POST-groups_id_removeMember.test.js index 9b197766b1..e86a4aadf7 100644 --- a/test/api/v3/integration/groups/POST-groups_id_removeMember.test.js +++ b/test/api/v3/integration/groups/POST-groups_id_removeMember.test.js @@ -84,7 +84,7 @@ describe('POST /groups/:groupId/removeMember/:memberId', () => { context('Party', () => { let party; - let partyleader; + let partyLeader; let partyInvitedUser; let partyMember; @@ -100,13 +100,13 @@ describe('POST /groups/:groupId/removeMember/:memberId', () => { }); party = group; - partyleader = groupLeader; + partyLeader = groupLeader; partyInvitedUser = invitees[0]; partyMember = members[0]; }); it('can remove other members', async () => { - await partyleader.post(`/groups/${party._id}/removeMember/${partyMember._id}`); + await partyLeader.post(`/groups/${party._id}/removeMember/${partyMember._id}`); let memberRemoved = await partyMember.get('/user'); @@ -115,18 +115,63 @@ describe('POST /groups/:groupId/removeMember/:memberId', () => { it('updates memberCount', async () => { let oldMemberCount = party.memberCount; - await partyleader.post(`/groups/${party._id}/removeMember/${partyMember._id}`); - await expect(partyleader.get(`/groups/${party._id}`)).to.eventually.have.property('memberCount', oldMemberCount - 1); + await partyLeader.post(`/groups/${party._id}/removeMember/${partyMember._id}`); + await expect(partyLeader.get(`/groups/${party._id}`)).to.eventually.have.property('memberCount', oldMemberCount - 1); }); it('can remove other invites', async () => { expect(partyInvitedUser.invitations.party).to.not.be.empty; - await partyleader.post(`/groups/${party._id}/removeMember/${partyInvitedUser._id}`); + await partyLeader.post(`/groups/${party._id}/removeMember/${partyInvitedUser._id}`); let invitedUserWithoutInvite = await partyInvitedUser.get('/user'); expect(invitedUserWithoutInvite.invitations.party).to.be.empty; }); + + it('removes user from quest when removing user from party after quest starts', async () => { + let petQuest = 'whale'; + await partyLeader.update({ + [`items.quests.${petQuest}`]: 1, + }); + + await partyLeader.post(`/groups/${party._id}/quests/invite/${petQuest}`); + await partyMember.post(`/groups/${party._id}/quests/accept`); + + await party.sync(); + + expect(party.quest.members[partyLeader._id]).to.be.true; + expect(party.quest.members[partyMember._id]).to.be.true; + + await partyLeader.post(`/groups/${party._id}/removeMember/${partyMember._id}`); + + await party.sync(); + + expect(party.quest.members[partyLeader._id]).to.be.true; + expect(party.quest.members[partyMember._id]).to.not.exist; + }); + + it('removes user from quest when removing user from party before quest starts', async () => { + let petQuest = 'whale'; + await partyLeader.update({ + [`items.quests.${petQuest}`]: 1, + }); + await partyInvitedUser.post(`/groups/${party._id}/join`); + await partyLeader.post(`/groups/${party._id}/quests/invite/${petQuest}`); + await partyMember.post(`/groups/${party._id}/quests/accept`); + + await party.sync(); + + expect(party.quest.active).to.be.false; + expect(party.quest.members[partyLeader._id]).to.be.true; + expect(party.quest.members[partyMember._id]).to.be.true; + + await partyLeader.post(`/groups/${party._id}/removeMember/${partyMember._id}`); + + await party.sync(); + + expect(party.quest.members[partyLeader._id]).to.be.true; + expect(party.quest.members[partyMember._id]).to.not.exist; + }); }); }); diff --git a/test/api/v3/integration/hall/GET-hall_heroes.test.js b/test/api/v3/integration/hall/GET-hall_heroes.test.js index 745bc7739c..a2b87ff689 100644 --- a/test/api/v3/integration/hall/GET-hall_heroes.test.js +++ b/test/api/v3/integration/hall/GET-hall_heroes.test.js @@ -1,9 +1,12 @@ import { generateUser, + resetHabiticaDB, } from '../../../../helpers/api-v3-integration.helper'; describe('GET /hall/heroes', () => { it('returns all heroes sorted by -contributor.level and with correct fields', async () => { + await resetHabiticaDB(); + let nonHero = await generateUser(); let hero1 = await generateUser({ contributor: {level: 1}, diff --git a/test/api/v3/integration/members/GET-members_id.test.js b/test/api/v3/integration/members/GET-members_id.test.js index a802a1e8a7..abb98c54b1 100644 --- a/test/api/v3/integration/members/GET-members_id.test.js +++ b/test/api/v3/integration/members/GET-members_id.test.js @@ -3,6 +3,7 @@ import { translate as t, } from '../../../../helpers/api-v3-integration.helper'; import { v4 as generateUUID } from 'uuid'; +import common from '../../../../../common'; describe('GET /members/:memberId', () => { let user; @@ -36,6 +37,10 @@ describe('GET /members/:memberId', () => { expect(Object.keys(memberRes.auth)).to.eql(['timestamps']); expect(Object.keys(memberRes.preferences).sort()).to.eql(['size', 'hair', 'skin', 'shirt', 'chair', 'costume', 'sleep', 'background'].sort()); + + expect(memberRes.stats.maxMP).to.exists; + expect(memberRes.stats.maxHealth).to.equal(common.maxHealth); + expect(memberRes.stats.toNextLevel).to.equal(common.tnl(memberRes.stats.lvl)); }); it('handles non-existing members', async () => { diff --git a/test/api/v3/integration/quests/POST-groups_groupId_quests_accept.test.js b/test/api/v3/integration/quests/POST-groups_groupId_quests_accept.test.js index fec6c5b88d..ed57d4250a 100644 --- a/test/api/v3/integration/quests/POST-groups_groupId_quests_accept.test.js +++ b/test/api/v3/integration/quests/POST-groups_groupId_quests_accept.test.js @@ -74,6 +74,21 @@ describe('POST /groups/:groupId/quests/accept', () => { }); }); + it('clears the invalid invite from the user when the request fails', async () => { + await leader.post(`/groups/${questingGroup._id}/quests/invite/${PET_QUEST}`); + await partyMembers[0].post(`/groups/${questingGroup._id}/quests/accept`); + + await expect(partyMembers[0].post(`/groups/${questingGroup._id}/quests/accept`)) + .to.eventually.be.rejected.and.eql({ + code: 400, + error: 'BadRequest', + message: t('questAlreadyAccepted'), + }); + + await partyMembers[0].sync(); + expect(partyMembers[0].party.quest.RSVPNeeded).to.be.false; + }); + it('does not accept invite for a quest already underway', async () => { await leader.post(`/groups/${questingGroup._id}/quests/invite/${PET_QUEST}`); await partyMembers[0].post(`/groups/${questingGroup._id}/quests/accept`); diff --git a/test/api/v3/integration/quests/POST-groups_groupid_quests_reject.test.js b/test/api/v3/integration/quests/POST-groups_groupid_quests_reject.test.js index c8db296ad9..8bdb3b7ba7 100644 --- a/test/api/v3/integration/quests/POST-groups_groupid_quests_reject.test.js +++ b/test/api/v3/integration/quests/POST-groups_groupid_quests_reject.test.js @@ -83,6 +83,21 @@ describe('POST /groups/:groupId/quests/reject', () => { }); }); + it('clears the user rsvp needed if the request fails because the request is invalid', async () => { + await leader.post(`/groups/${questingGroup._id}/quests/invite/${PET_QUEST}`); + await partyMembers[0].post(`/groups/${questingGroup._id}/quests/reject`); + + await expect(partyMembers[0].post(`/groups/${questingGroup._id}/quests/reject`)) + .to.eventually.be.rejected.and.eql({ + code: 400, + error: 'BadRequest', + message: t('questAlreadyRejected'), + }); + + await partyMembers[0].sync(); + expect(partyMembers[0].party.quest.RSVPNeeded).to.be.false; + }); + it('return an error when a user rejects an invite already accepted', async () => { await leader.post(`/groups/${questingGroup._id}/quests/invite/${PET_QUEST}`); await partyMembers[0].post(`/groups/${questingGroup._id}/quests/accept`); diff --git a/test/api/v3/integration/shops/GET-shops_market.test.js b/test/api/v3/integration/shops/GET-shops_market.test.js new file mode 100644 index 0000000000..02162f0d5c --- /dev/null +++ b/test/api/v3/integration/shops/GET-shops_market.test.js @@ -0,0 +1,28 @@ +import { + generateUser, + translate as t, +} from '../../../../helpers/api-integration/v3'; + +describe('GET /shops/market', () => { + let user; + + beforeEach(async () => { + user = await generateUser(); + }); + + it('returns a valid shop object', async () => { + let shop = await user.get('/shops/market'); + + expect(shop.identifier).to.equal('market'); + expect(shop.text).to.eql(t('market')); + expect(shop.notes).to.eql(t('welcomeMarketMobile')); + expect(shop.imageName).to.be.a('string'); + expect(shop.categories).to.be.an('array'); + + let categories = shop.categories.map(cat => cat.identifier); + + expect(categories).to.include('eggs'); + expect(categories).to.include('hatchingPotions'); + expect(categories).to.include('food'); + }); +}); diff --git a/test/api/v3/integration/shops/GET-shops_quests.test.js b/test/api/v3/integration/shops/GET-shops_quests.test.js new file mode 100644 index 0000000000..e4546fb4b5 --- /dev/null +++ b/test/api/v3/integration/shops/GET-shops_quests.test.js @@ -0,0 +1,28 @@ +import { + generateUser, + translate as t, +} from '../../../../helpers/api-integration/v3'; + +describe('GET /shops/quests', () => { + let user; + + beforeEach(async () => { + user = await generateUser(); + }); + + it('returns a valid shop object', async () => { + let shop = await user.get('/shops/quests'); + + expect(shop.identifier).to.equal('questShop'); + expect(shop.text).to.eql(t('quests')); + expect(shop.notes).to.eql(t('ianTextMobile')); + expect(shop.imageName).to.be.a('string'); + expect(shop.categories).to.be.an('array'); + + let categories = shop.categories.map(cat => cat.identifier); + + expect(categories).to.include('unlockable'); + expect(categories).to.include('gold'); + expect(categories).to.include('pet'); + }); +}); diff --git a/test/api/v3/integration/shops/GET-shops_seasonal.test.js b/test/api/v3/integration/shops/GET-shops_seasonal.test.js new file mode 100644 index 0000000000..722cb35665 --- /dev/null +++ b/test/api/v3/integration/shops/GET-shops_seasonal.test.js @@ -0,0 +1,22 @@ +import { + generateUser, + translate as t, +} from '../../../../helpers/api-integration/v3'; + +describe('GET /shops/seasonal', () => { + let user; + + beforeEach(async () => { + user = await generateUser(); + }); + + it('returns a valid shop object', async () => { + let shop = await user.get('/shops/seasonal'); + + expect(shop.identifier).to.equal('seasonalShop'); + expect(shop.text).to.eql(t('seasonalShop')); + expect(shop.notes).to.eql(t('seasonalShopClosedText')); + expect(shop.imageName).to.be.a('string'); + expect(shop.categories).to.be.an('array'); + }); +}); diff --git a/test/api/v3/integration/shops/GET-shops_time_travelers.test.js b/test/api/v3/integration/shops/GET-shops_time_travelers.test.js new file mode 100644 index 0000000000..5ae901f657 --- /dev/null +++ b/test/api/v3/integration/shops/GET-shops_time_travelers.test.js @@ -0,0 +1,98 @@ +import { + generateUser, + translate as t, +} from '../../../../helpers/api-integration/v3'; + +describe('GET /shops/time-travelers', () => { + let user; + + beforeEach(async () => { + user = await generateUser(); + }); + + it('returns a valid shop object', async () => { + let shop = await user.get('/shops/time-travelers'); + + expect(shop.identifier).to.equal('timeTravelersShop'); + expect(shop.text).to.eql(t('timeTravelers')); + expect(shop.notes).to.be.a('string'); + expect(shop.imageName).to.be.a('string'); + expect(shop.categories).to.be.an('array'); + + let categories = shop.categories.map(cat => cat.identifier); + + expect(categories).to.include('pets'); + expect(categories).to.include('mounts'); + expect(categories).to.include('201606'); + + let mammothPet = shop.categories + .find(cat => cat.identifier === 'pets') + .items + .find(pet => pet.key === 'Mammoth-Base'); + let mantisShrimp = shop.categories + .find(cat => cat.identifier === 'mounts') + .items + .find(pet => pet.key === 'MantisShrimp-Base'); + + expect(mammothPet).to.exist; + expect(mantisShrimp).to.exist; + }); + + it('returns active shop notes and imageName if user has trinkets', async () => { + await user.update({ + 'purchased.plan.consecutive.trinkets': 1, + }); + + let shop = await user.get('/shops/time-travelers'); + + expect(shop.notes).to.eql(t('timeTravelersPopover')); + expect(shop.imageName).to.eql('npc_timetravelers_active'); + }); + + it('returns inactive shop notes and imageName if user has trinkets', async () => { + let shop = await user.get('/shops/time-travelers'); + + expect(shop.notes).to.eql(t('timeTravelersPopoverNoSubMobile')); + expect(shop.imageName).to.eql('npc_timetravelers'); + }); + + it('does not return mystery sets that are already owned', async () => { + await user.update({ + 'items.gear.owned': { + head_mystery_201606: true, // eslint-disable-line camelcase + armor_mystery_201606: true, // eslint-disable-line camelcase + }, + }); + + let shop = await user.get('/shops/time-travelers'); + + let categories = shop.categories.map(cat => cat.identifier); + + expect(categories).to.not.include('201606'); + }); + + it('does not return pets and mounts that user already owns', async () => { + await user.update({ + 'items.mounts': { + 'MantisShrimp-Base': true, + }, + 'items.pets': { + 'Mammoth-Base': 5, + }, + }); + + let shop = await user.get('/shops/time-travelers'); + + let mammothPet = shop.categories + .find(cat => cat.identifier === 'pets') + .items + .find(pet => pet.key === 'Mammoth-Base'); + let mantisShrimp = shop.categories + .find(cat => cat.identifier === 'mounts') + .items + .find(pet => pet.key === 'MantisShrimp-Base'); + + expect(mammothPet).to.not.exist; + expect(mantisShrimp).to.not.exist; + }); +}); diff --git a/test/api/v3/integration/user/GET-user.test.js b/test/api/v3/integration/user/GET-user.test.js index f4ed75f03f..f68c5d59e4 100644 --- a/test/api/v3/integration/user/GET-user.test.js +++ b/test/api/v3/integration/user/GET-user.test.js @@ -1,6 +1,7 @@ import { generateUser, } from '../../../../helpers/api-integration/v3'; +import common from '../../../../../common'; describe('GET /user', () => { let user; @@ -9,9 +10,13 @@ describe('GET /user', () => { user = await generateUser(); }); - it('returns the authenticated user', async () => { + it('returns the authenticated user with computed stats', async () => { let returnedUser = await user.get('/user'); expect(returnedUser._id).to.equal(user._id); + + expect(returnedUser.stats.maxMP).to.exists; + expect(returnedUser.stats.maxHealth).to.equal(common.maxHealth); + expect(returnedUser.stats.toNextLevel).to.equal(common.tnl(returnedUser.stats.lvl)); }); it('does not return private paths (and apiToken)', async () => { diff --git a/test/api/v3/integration/user/auth/POST-login-local.test.js b/test/api/v3/integration/user/auth/POST-login-local.test.js index 571b23c3ea..86a49ff548 100644 --- a/test/api/v3/integration/user/auth/POST-login-local.test.js +++ b/test/api/v3/integration/user/auth/POST-login-local.test.js @@ -13,6 +13,7 @@ describe('POST /user/auth/local/login', () => { api = requester(); user = await generateUser(); }); + it('success with username', async () => { let response = await api.post(endpoint, { username: user.auth.local.username, @@ -20,6 +21,7 @@ describe('POST /user/auth/local/login', () => { }); expect(response.apiToken).to.eql(user.apiToken); }); + it('success with email', async () => { let response = await api.post(endpoint, { username: user.auth.local.email, @@ -27,6 +29,7 @@ describe('POST /user/auth/local/login', () => { }); expect(response.apiToken).to.eql(user.apiToken); }); + it('user is blocked', async () => { await user.update({ 'auth.blocked': 1 }); await expect(api.post(endpoint, { @@ -38,6 +41,7 @@ describe('POST /user/auth/local/login', () => { message: t('accountSuspended', { userId: user._id }), }); }); + it('wrong password', async () => { await expect(api.post(endpoint, { username: user.auth.local.username, @@ -48,6 +52,7 @@ describe('POST /user/auth/local/login', () => { message: t('invalidLoginCredentialsLong'), }); }); + it('missing username', async () => { await expect(api.post(endpoint, { password: 'wrong-password', @@ -57,6 +62,7 @@ describe('POST /user/auth/local/login', () => { message: t('invalidReqParams'), }); }); + it('missing password', async () => { await expect(api.post(endpoint, { username: user.auth.local.username, diff --git a/test/api/v3/integration/user/auth/POST-register_local.test.js b/test/api/v3/integration/user/auth/POST-register_local.test.js index 63d8f755a5..97d30a5f70 100644 --- a/test/api/v3/integration/user/auth/POST-register_local.test.js +++ b/test/api/v3/integration/user/auth/POST-register_local.test.js @@ -6,7 +6,7 @@ import { } from '../../../../../helpers/api-integration/v3'; import { v4 as generateRandomUserName } from 'uuid'; import { each } from 'lodash'; -import { encrypt } from '../../../../../../website/server/libs/api-v3/encryption'; +import { encrypt } from '../../../../../../website/server/libs/encryption'; describe('POST /user/auth/local/register', () => { context('username and email are free', () => { diff --git a/test/api/v3/integration/user/auth/POST-user_auth_social.test.js b/test/api/v3/integration/user/auth/POST-user_auth_social.test.js new file mode 100644 index 0000000000..4bcd7b09fe --- /dev/null +++ b/test/api/v3/integration/user/auth/POST-user_auth_social.test.js @@ -0,0 +1,59 @@ +import { + generateUser, + requester, + translate as t, +} from '../../../../../helpers/api-integration/v3'; +import passport from 'passport'; + +describe('POST /user/auth/social', () => { + let api; + let user; + let endpoint = '/user/auth/social'; + let randomAccessToken = '123456'; + let facebookId = 'facebookId'; + let network = 'facebook'; + + before(async () => { + api = requester(); + user = await generateUser(); + + let expectedResult = {id: facebookId}; + let passportFacebookProfile = sinon.stub(passport._strategies.facebook, 'userProfile'); + passportFacebookProfile.yields(null, expectedResult); + }); + + it('fails if network is not facebook', async () => { + await expect(api.post(endpoint, { + authResponse: {access_token: randomAccessToken}, // eslint-disable-line camelcase + network: 'NotFacebook', + })).to.eventually.be.rejected.and.eql({ + code: 401, + error: 'NotAuthorized', + message: t('onlyFbSupported'), + }); + }); + + it('registers a new user', async () => { + let response = await api.post(endpoint, { + authResponse: {access_token: randomAccessToken}, // eslint-disable-line camelcase + network, + }); + + expect(response.apiToken).to.exist; + expect(response.id).to.exist; + expect(response.newUser).to.be.true; + }); + + it('logs an existing user in', async () => { + await user.update({ 'auth.facebook.id': facebookId }); + + let response = await api.post(endpoint, { + authResponse: {access_token: randomAccessToken}, // eslint-disable-line camelcase + network, + }); + + expect(response.apiToken).to.eql(user.apiToken); + expect(response.id).to.eql(user._id); + expect(response.newUser).to.be.false; + }); +}); diff --git a/test/api/v3/unit/libs/analyticsService.test.js b/test/api/v3/unit/libs/analyticsService.test.js index 553dfb676c..4e9e491fca 100644 --- a/test/api/v3/unit/libs/analyticsService.test.js +++ b/test/api/v3/unit/libs/analyticsService.test.js @@ -1,7 +1,7 @@ // TODO These tests are pretty brittle // rewrite them to not depend on nock // Trust that the amplitude module works as intended and sends the requests -import analyticsService from '../../../../../website/server/libs/api-v3/analyticsService'; +import analyticsService from '../../../../../website/server/libs/analyticsService'; import nock from 'nock'; diff --git a/test/api/v3/unit/libs/baseModel.test.js b/test/api/v3/unit/libs/baseModel.test.js index 39bf7df047..676366d42f 100644 --- a/test/api/v3/unit/libs/baseModel.test.js +++ b/test/api/v3/unit/libs/baseModel.test.js @@ -1,4 +1,4 @@ -import baseModel from '../../../../../website/server/libs/api-v3/baseModel'; +import baseModel from '../../../../../website/server/libs/baseModel'; import mongoose from 'mongoose'; describe('Base model plugin', () => { diff --git a/test/api/v3/unit/libs/buildManifest.test.js b/test/api/v3/unit/libs/buildManifest.test.js index c1213fd140..72cffec6c5 100644 --- a/test/api/v3/unit/libs/buildManifest.test.js +++ b/test/api/v3/unit/libs/buildManifest.test.js @@ -1,6 +1,6 @@ import { getManifestFiles, -} from '../../../../../website/server/libs/api-v3/buildManifest'; +} from '../../../../../website/server/libs/buildManifest'; describe('Build Manifest', () => { describe('getManifestFiles', () => { diff --git a/test/api/v3/unit/libs/collectionManipulators.test.js b/test/api/v3/unit/libs/collectionManipulators.test.js index da44fd5319..a2bc6e71c4 100644 --- a/test/api/v3/unit/libs/collectionManipulators.test.js +++ b/test/api/v3/unit/libs/collectionManipulators.test.js @@ -1,7 +1,7 @@ import mongoose from 'mongoose'; import { removeFromArray, -} from '../../../../../website/server/libs/api-v3/collectionManipulators'; +} from '../../../../../website/server/libs/collectionManipulators'; describe('Collection Manipulators', () => { describe('removeFromArray', () => { diff --git a/test/api/v3/unit/libs/cron.test.js b/test/api/v3/unit/libs/cron.test.js index 7141837f24..b6ed5b6c39 100644 --- a/test/api/v3/unit/libs/cron.test.js +++ b/test/api/v3/unit/libs/cron.test.js @@ -1,7 +1,7 @@ /* eslint-disable global-require */ import moment from 'moment'; import Bluebird from 'bluebird'; -import { recoverCron, cron } from '../../../../../website/server/libs/api-v3/cron'; +import { recoverCron, cron } from '../../../../../website/server/libs/cron'; import { model as User } from '../../../../../website/server/models/user'; import * as Tasks from '../../../../../website/server/models/task'; import { clone } from 'lodash'; diff --git a/test/api/v3/unit/libs/email.test.js b/test/api/v3/unit/libs/email.test.js index cfd18857ed..46476aa7ef 100644 --- a/test/api/v3/unit/libs/email.test.js +++ b/test/api/v3/unit/libs/email.test.js @@ -4,7 +4,7 @@ import nconf from 'nconf'; import nodemailer from 'nodemailer'; import Bluebird from 'bluebird'; import requireAgain from 'require-again'; -import logger from '../../../../../website/server/libs/api-v3/logger'; +import logger from '../../../../../website/server/libs/logger'; import { TAVERN_ID } from '../../../../../website/server/models/group'; function defer () { @@ -50,7 +50,7 @@ function getUser () { } describe('emails', () => { - let pathToEmailLib = '../../../../../website/server/libs/api-v3/email'; + let pathToEmailLib = '../../../../../website/server/libs/email'; describe('sendEmail', () => { it('can send an email using the default transport', () => { diff --git a/test/api/v3/unit/libs/encryption.test.js b/test/api/v3/unit/libs/encryption.test.js index a63a527e74..0396fded1c 100644 --- a/test/api/v3/unit/libs/encryption.test.js +++ b/test/api/v3/unit/libs/encryption.test.js @@ -1,7 +1,7 @@ import { encrypt, decrypt, -} from '../../../../../website/server/libs/api-v3/encryption'; +} from '../../../../../website/server/libs/encryption'; describe('encryption', () => { it('can encrypt and decrypt', () => { diff --git a/test/api/v3/unit/libs/errors.test.js b/test/api/v3/unit/libs/errors.test.js index efa694d5ab..d1c1c1e758 100644 --- a/test/api/v3/unit/libs/errors.test.js +++ b/test/api/v3/unit/libs/errors.test.js @@ -5,7 +5,7 @@ import { BadRequest, InternalServerError, NotFound, -} from '../../../../../website/server/libs/api-v3/errors'; +} from '../../../../../website/server/libs/errors'; describe('Custom Errors', () => { describe('CustomError', () => { diff --git a/test/api/v3/unit/libs/i18n.test.js b/test/api/v3/unit/libs/i18n.test.js index 06ebcbc0b6..9e31b1a406 100644 --- a/test/api/v3/unit/libs/i18n.test.js +++ b/test/api/v3/unit/libs/i18n.test.js @@ -2,7 +2,7 @@ import { translations, localePath, langCodes, -} from '../../../../../website/server/libs/api-v3/i18n'; +} from '../../../../../website/server/libs/i18n'; import fs from 'fs'; import path from 'path'; diff --git a/test/api/v3/unit/libs/logger.js b/test/api/v3/unit/libs/logger.js index b7e1d490fc..20189ccbe1 100644 --- a/test/api/v3/unit/libs/logger.js +++ b/test/api/v3/unit/libs/logger.js @@ -3,7 +3,7 @@ import requireAgain from 'require-again'; /* eslint-disable global-require */ describe('logger', () => { - let pathToLoggerLib = '../../../../../website/server/libs/api-v3/logger'; + let pathToLoggerLib = '../../../../../website/server/libs/logger'; let infoSpy; let errorSpy; diff --git a/test/api/v3/unit/libs/password.test.js b/test/api/v3/unit/libs/password.test.js index 68290aebc6..29de44676c 100644 --- a/test/api/v3/unit/libs/password.test.js +++ b/test/api/v3/unit/libs/password.test.js @@ -1,7 +1,7 @@ import { encrypt as encryptPassword, makeSalt, -} from '../../../../../website/server/libs/api-v3/password'; +} from '../../../../../website/server/libs/password'; describe('Password Utilities', () => { describe('Encrypt', () => { diff --git a/test/api/v3/unit/libs/payments.test.js b/test/api/v3/unit/libs/payments.test.js index 60394e83d4..33ba5d8f65 100644 --- a/test/api/v3/unit/libs/payments.test.js +++ b/test/api/v3/unit/libs/payments.test.js @@ -1,6 +1,6 @@ -import * as sender from '../../../../../website/server/libs/api-v3/email'; -import * as api from '../../../../../website/server/libs/api-v3/payments'; -import analytics from '../../../../../website/server/libs/api-v3/analyticsService'; +import * as sender from '../../../../../website/server/libs/email'; +import * as api from '../../../../../website/server/libs/payments'; +import analytics from '../../../../../website/server/libs/analyticsService'; import { model as User } from '../../../../../website/server/models/user'; import moment from 'moment'; diff --git a/test/api/v3/unit/libs/preening.test.js b/test/api/v3/unit/libs/preening.test.js index af503ca480..3c28557125 100644 --- a/test/api/v3/unit/libs/preening.test.js +++ b/test/api/v3/unit/libs/preening.test.js @@ -1,4 +1,4 @@ -import { preenHistory } from '../../../../../website/server/libs/api-v3/preening'; +import { preenHistory } from '../../../../../website/server/libs/preening'; import moment from 'moment'; import sinon from 'sinon'; // eslint-disable-line no-shadow import { generateHistory } from '../../../../helpers/api-unit.helper.js'; diff --git a/test/api/v3/unit/libs/pushNotifications.js b/test/api/v3/unit/libs/pushNotifications.js index cbc0d71bef..0d6fead7ae 100644 --- a/test/api/v3/unit/libs/pushNotifications.js +++ b/test/api/v3/unit/libs/pushNotifications.js @@ -2,12 +2,13 @@ import { model as User } from '../../../../../website/server/models/user'; import requireAgain from 'require-again'; import pushNotify from 'push-notify'; import nconf from 'nconf'; +import gcmLib from 'node-gcm'; // works with FCM notifications too describe('pushNotifications', () => { let user; let sendPushNotification; - let pathToPushNotifications = '../../../../../website/server/libs/api-v3/pushNotifications'; - let gcmSendSpy; + let pathToPushNotifications = '../../../../../website/server/libs/pushNotifications'; + let fcmSendSpy; let apnSendSpy; let identifier = 'identifier'; @@ -16,15 +17,12 @@ describe('pushNotifications', () => { beforeEach(() => { user = new User(); - gcmSendSpy = sinon.spy(); + fcmSendSpy = sinon.spy(); apnSendSpy = sinon.spy(); - sandbox.stub(nconf, 'get').returns('true'); + sandbox.stub(nconf, 'get').returns('true-key'); - sandbox.stub(pushNotify, 'gcm').returns({ - on: () => null, - send: gcmSendSpy, - }); + sandbox.stub(gcmLib.Sender.prototype, 'send', fcmSendSpy); sandbox.stub(pushNotify, 'apn').returns({ on: () => null, @@ -40,14 +38,14 @@ describe('pushNotifications', () => { it('throws if user is not supplied', () => { expect(sendPushNotification).to.throw; - expect(gcmSendSpy).to.not.have.been.called; + expect(fcmSendSpy).to.not.have.been.called; expect(apnSendSpy).to.not.have.been.called; }); it('throws if user.preferences.pushNotifications.unsubscribeFromAll is true', () => { user.preferences.pushNotifications.unsubscribeFromAll = true; expect(() => sendPushNotification(user)).to.throw; - expect(gcmSendSpy).to.not.have.been.called; + expect(fcmSendSpy).to.not.have.been.called; expect(apnSendSpy).to.not.have.been.called; }); @@ -56,7 +54,7 @@ describe('pushNotifications', () => { title, message, })).to.throw; - expect(gcmSendSpy).to.not.have.been.called; + expect(fcmSendSpy).to.not.have.been.called; expect(apnSendSpy).to.not.have.been.called; }); @@ -65,7 +63,7 @@ describe('pushNotifications', () => { identifier, message, })).to.throw; - expect(gcmSendSpy).to.not.have.been.called; + expect(fcmSendSpy).to.not.have.been.called; expect(apnSendSpy).to.not.have.been.called; }); @@ -74,7 +72,7 @@ describe('pushNotifications', () => { identifier, title, })).to.throw; - expect(gcmSendSpy).to.not.have.been.called; + expect(fcmSendSpy).to.not.have.been.called; expect(apnSendSpy).to.not.have.been.called; }); @@ -84,68 +82,7 @@ describe('pushNotifications', () => { title, message, }); - expect(gcmSendSpy).to.not.have.been.called; - expect(apnSendSpy).to.not.have.been.called; - }); - - it('uses GCM for Android devices', () => { - user.pushDevices.push({ - type: 'android', - regId: '123', - }); - - let details = { - identifier, - title, - message, - payload: { - a: true, - b: true, - }, - timeToLive: 23, - }; - - sendPushNotification(user, details); - expect(gcmSendSpy).to.have.been.calledOnce; - expect(gcmSendSpy).to.have.been.calledWithMatch({ - registrationId: '123', - delayWhileIdle: true, - timeToLive: 23, - data: { - identifier, - title, - message, - a: true, - b: true, - }, - }); - expect(apnSendSpy).to.not.have.been.called; - }); - - it('defaults timeToLive to 15', () => { - user.pushDevices.push({ - type: 'android', - regId: '123', - }); - - let details = { - identifier, - title, - message, - }; - - sendPushNotification(user, details); - expect(gcmSendSpy).to.have.been.calledOnce; - expect(gcmSendSpy).to.have.been.calledWithMatch({ - registrationId: '123', - delayWhileIdle: true, - timeToLive: 15, - data: { - identifier, - title, - message, - }, - }); + expect(fcmSendSpy).to.not.have.been.called; expect(apnSendSpy).to.not.have.been.called; }); @@ -180,6 +117,6 @@ describe('pushNotifications', () => { b: true, }, }); - expect(gcmSendSpy).to.not.have.been.called; + expect(fcmSendSpy).to.not.have.been.called; }); }); diff --git a/test/api/v3/unit/libs/setupNconf.test.js b/test/api/v3/unit/libs/setupNconf.test.js index 3e848b845f..afe000d969 100644 --- a/test/api/v3/unit/libs/setupNconf.test.js +++ b/test/api/v3/unit/libs/setupNconf.test.js @@ -1,4 +1,4 @@ -import setupNconf from '../../../../../website/server/libs/api-v3/setupNconf'; +import setupNconf from '../../../../../website/server/libs/setupNconf'; import path from 'path'; import nconf from 'nconf'; diff --git a/test/api/v3/unit/libs/webhooks.test.js b/test/api/v3/unit/libs/webhooks.test.js index 502bfe3839..85072792fb 100644 --- a/test/api/v3/unit/libs/webhooks.test.js +++ b/test/api/v3/unit/libs/webhooks.test.js @@ -1,5 +1,5 @@ import request from 'request'; -import { sendTaskWebhook } from '../../../../../website/server/libs/api-v3/webhook'; +import { sendTaskWebhook } from '../../../../../website/server/libs/webhook'; describe('webhooks', () => { beforeEach(() => { diff --git a/test/api/v3/unit/middlewares/analytics.test.js b/test/api/v3/unit/middlewares/analytics.test.js index 2a25380713..c55b212698 100644 --- a/test/api/v3/unit/middlewares/analytics.test.js +++ b/test/api/v3/unit/middlewares/analytics.test.js @@ -4,13 +4,13 @@ import { generateReq, generateNext, } from '../../../../helpers/api-unit.helper'; -import analyticsService from '../../../../../website/server/libs/api-v3/analyticsService'; +import analyticsService from '../../../../../website/server/libs/analyticsService'; import nconf from 'nconf'; import requireAgain from 'require-again'; describe('analytics middleware', () => { let res, req, next; - let pathToAnalyticsMiddleware = '../../../../../website/server/middlewares/api-v3/analytics'; + let pathToAnalyticsMiddleware = '../../../../../website/server/middlewares/analytics'; beforeEach(() => { res = generateRes(); diff --git a/test/api/v3/unit/middlewares/cors.test.js b/test/api/v3/unit/middlewares/cors.test.js index 78d11651f8..051eada21e 100644 --- a/test/api/v3/unit/middlewares/cors.test.js +++ b/test/api/v3/unit/middlewares/cors.test.js @@ -4,7 +4,7 @@ import { generateReq, generateNext, } from '../../../../helpers/api-unit.helper'; -import cors from '../../../../../website/server/middlewares/api-v3/cors'; +import cors from '../../../../../website/server/middlewares/cors'; describe('cors middleware', () => { let res, req, next; diff --git a/test/api/v3/unit/middlewares/cronMiddleware.js b/test/api/v3/unit/middlewares/cronMiddleware.js index 4e58c20343..db3741b9cc 100644 --- a/test/api/v3/unit/middlewares/cronMiddleware.js +++ b/test/api/v3/unit/middlewares/cronMiddleware.js @@ -5,13 +5,13 @@ import { generateDaily, } from '../../../../helpers/api-unit.helper'; import { cloneDeep } from 'lodash'; -import cronMiddleware from '../../../../../website/server/middlewares/api-v3/cron'; +import cronMiddleware from '../../../../../website/server/middlewares/cron'; import moment from 'moment'; import { model as User } from '../../../../../website/server/models/user'; import { model as Group } from '../../../../../website/server/models/group'; import * as Tasks from '../../../../../website/server/models/task'; -import analyticsService from '../../../../../website/server/libs/api-v3/analyticsService'; -import * as cronLib from '../../../../../website/server/libs/api-v3/cron'; +import analyticsService from '../../../../../website/server/libs/analyticsService'; +import * as cronLib from '../../../../../website/server/libs/cron'; import { v4 as generateUUID } from 'uuid'; describe('cron middleware', () => { diff --git a/test/api/v3/unit/middlewares/ensureAccessRight.test.js b/test/api/v3/unit/middlewares/ensureAccessRight.test.js index cc25e4f16b..fee84ce124 100644 --- a/test/api/v3/unit/middlewares/ensureAccessRight.test.js +++ b/test/api/v3/unit/middlewares/ensureAccessRight.test.js @@ -5,8 +5,8 @@ import { generateNext, } from '../../../../helpers/api-unit.helper'; import i18n from '../../../../../common/script/i18n'; -import { ensureAdmin, ensureSudo } from '../../../../../website/server/middlewares/api-v3/ensureAccessRight'; -import { NotAuthorized } from '../../../../../website/server/libs/api-v3/errors'; +import { ensureAdmin, ensureSudo } from '../../../../../website/server/middlewares/ensureAccessRight'; +import { NotAuthorized } from '../../../../../website/server/libs/errors'; describe('ensure access middlewares', () => { let res, req, next; diff --git a/test/api/v3/unit/middlewares/ensureDevelpmentMode.js b/test/api/v3/unit/middlewares/ensureDevelpmentMode.js index d7915b365f..0815bc0007 100644 --- a/test/api/v3/unit/middlewares/ensureDevelpmentMode.js +++ b/test/api/v3/unit/middlewares/ensureDevelpmentMode.js @@ -4,8 +4,8 @@ import { generateReq, generateNext, } from '../../../../helpers/api-unit.helper'; -import ensureDevelpmentMode from '../../../../../website/server/middlewares/api-v3/ensureDevelpmentMode'; -import { NotFound } from '../../../../../website/server/libs/api-v3/errors'; +import ensureDevelpmentMode from '../../../../../website/server/middlewares/ensureDevelpmentMode'; +import { NotFound } from '../../../../../website/server/libs/errors'; import nconf from 'nconf'; describe('developmentMode middleware', () => { diff --git a/test/api/v3/unit/middlewares/errorHandler.test.js b/test/api/v3/unit/middlewares/errorHandler.test.js index da7d54e667..1c973abe23 100644 --- a/test/api/v3/unit/middlewares/errorHandler.test.js +++ b/test/api/v3/unit/middlewares/errorHandler.test.js @@ -4,15 +4,15 @@ import { generateNext, } from '../../../../helpers/api-unit.helper'; -import errorHandler from '../../../../../website/server/middlewares/api-v3/errorHandler'; -import responseMiddleware from '../../../../../website/server/middlewares/api-v3/response'; +import errorHandler from '../../../../../website/server/middlewares/errorHandler'; +import responseMiddleware from '../../../../../website/server/middlewares/response'; import { getUserLanguage, attachTranslateFunction, -} from '../../../../../website/server/middlewares/api-v3/language'; +} from '../../../../../website/server/middlewares/language'; -import { BadRequest } from '../../../../../website/server/libs/api-v3/errors'; -import logger from '../../../../../website/server/libs/api-v3/logger'; +import { BadRequest } from '../../../../../website/server/libs/errors'; +import logger from '../../../../../website/server/libs/logger'; describe('errorHandler', () => { let res, req, next; diff --git a/test/api/v3/unit/middlewares/language.test.js b/test/api/v3/unit/middlewares/language.test.js index 23ef6deddd..20bac3c518 100644 --- a/test/api/v3/unit/middlewares/language.test.js +++ b/test/api/v3/unit/middlewares/language.test.js @@ -6,7 +6,7 @@ import { import { getUserLanguage, attachTranslateFunction, -} from '../../../../../website/server/middlewares/api-v3/language'; +} from '../../../../../website/server/middlewares/language'; import common from '../../../../../common'; import Bluebird from 'bluebird'; import { model as User } from '../../../../../website/server/models/user'; diff --git a/test/api/v3/unit/middlewares/maintenanceMode.test.js b/test/api/v3/unit/middlewares/maintenanceMode.test.js index 21cabe963d..857fb2c941 100644 --- a/test/api/v3/unit/middlewares/maintenanceMode.test.js +++ b/test/api/v3/unit/middlewares/maintenanceMode.test.js @@ -8,7 +8,7 @@ import requireAgain from 'require-again'; describe('maintenance mode middleware', () => { let res, req, next; - let pathToMaintenanceModeMiddleware = '../../../../../website/server/middlewares/api-v3/maintenanceMode'; + let pathToMaintenanceModeMiddleware = '../../../../../website/server/middlewares/maintenanceMode'; beforeEach(() => { res = generateRes(); diff --git a/test/api/v3/unit/middlewares/response.js b/test/api/v3/unit/middlewares/response.js index b3182ea87a..cbf2f178e3 100644 --- a/test/api/v3/unit/middlewares/response.js +++ b/test/api/v3/unit/middlewares/response.js @@ -3,7 +3,7 @@ import { generateReq, generateNext, } from '../../../../helpers/api-unit.helper'; -import responseMiddleware from '../../../../../website/server/middlewares/api-v3/response'; +import responseMiddleware from '../../../../../website/server/middlewares/response'; describe('response middleware', () => { let res, req, next; diff --git a/test/api/v3/unit/models/group.test.js b/test/api/v3/unit/models/group.test.js index c3c7f615c1..ff3785ef5a 100644 --- a/test/api/v3/unit/models/group.test.js +++ b/test/api/v3/unit/models/group.test.js @@ -2,7 +2,7 @@ import { sleep } from '../../../../helpers/api-unit.helper'; import { model as Group } from '../../../../../website/server/models/group'; import { model as User } from '../../../../../website/server/models/user'; import { quests as questScrolls } from '../../../../../common/script/content'; -import * as email from '../../../../../website/server/libs/api-v3/email'; +import * as email from '../../../../../website/server/libs/email'; import validator from 'validator'; import { TAVERN_ID } from '../../../../../common/script/'; @@ -434,6 +434,47 @@ describe('Group Model', () => { }); }); + describe('#leaveGroup', () => { + it('removes user from group quest', async () => { + party.quest.members = { + [participatingMember._id]: true, + [questLeader._id]: true, + [nonParticipatingMember._id]: false, + [undecidedMember._id]: null, + }; + party.memberCount = 4; + await party.save(); + + await party.leave(participatingMember); + + party = await Group.findOne({_id: party._id}); + expect(party.quest.members).to.eql({ + [questLeader._id]: true, + [nonParticipatingMember._id]: false, + [undecidedMember._id]: null, + }); + }); + + it('deletes a private group when the last member leaves', async () => { + party.memberCount = 1; + + await party.leave(participatingMember); + + party = await Group.findOne({_id: party._id}); + expect(party).to.not.exist; + }); + + it('does not delete a public group when the last member leaves', async () => { + party.memberCount = 1; + party.privacy = 'public'; + + await party.leave(participatingMember); + + party = await Group.findOne({_id: party._id}); + expect(party).to.exist; + }); + }); + describe('#sendChat', () => { beforeEach(() => { sandbox.spy(User, 'update'); diff --git a/test/api/v3/unit/models/task.test.js b/test/api/v3/unit/models/task.test.js index 7182b8e5a1..4ae02e6ca9 100644 --- a/test/api/v3/unit/models/task.test.js +++ b/test/api/v3/unit/models/task.test.js @@ -2,7 +2,7 @@ import { model as Challenge } from '../../../../../website/server/models/challen import { model as Group } from '../../../../../website/server/models/group'; import { model as User } from '../../../../../website/server/models/user'; import * as Tasks from '../../../../../website/server/models/task'; -import { InternalServerError } from '../../../../../website/server/libs/api-v3/errors'; +import { InternalServerError } from '../../../../../website/server/libs/errors'; import { each } from 'lodash'; import { generateHistory } from '../../../../helpers/api-unit.helper.js'; diff --git a/test/api/v3/unit/models/user.test.js b/test/api/v3/unit/models/user.test.js index 29ac2c0c07..f6be1a8930 100644 --- a/test/api/v3/unit/models/user.test.js +++ b/test/api/v3/unit/models/user.test.js @@ -1,4 +1,5 @@ import { model as User } from '../../../../../website/server/models/user'; +import common from '../../../../../common'; describe('User Model', () => { it('keeps user._tmp when calling .toJSON', () => { @@ -31,6 +32,21 @@ describe('User Model', () => { expect(toJSON).to.not.have.keys('_nonTmp'); }); + it('can add computed stats to a JSONified user object', () => { + let user = new User(); + let userToJSON = user.toJSON(); + + expect(userToJSON.stats.maxMP).to.not.exists; + expect(userToJSON.stats.maxHealth).to.not.exists; + expect(userToJSON.stats.toNextLevel).to.not.exists; + + user.addComputedStatsToJSONObj(userToJSON); + + expect(userToJSON.stats.maxMP).to.exists; + expect(userToJSON.stats.maxHealth).to.equal(common.maxHealth); + expect(userToJSON.stats.toNextLevel).to.equal(common.tnl(user.stats.lvl)); + }); + context('notifications', () => { it('can add notifications with data', () => { let user = new User(); diff --git a/test/common/libs/shops.js b/test/common/libs/shops.js new file mode 100644 index 0000000000..16fce945b1 --- /dev/null +++ b/test/common/libs/shops.js @@ -0,0 +1,84 @@ +import shared from '../../../common'; +import { + generateUser, +} from '../../helpers/common.helper'; + +describe('shops', () => { + let user = generateUser(); + + describe('market', () => { + let shopCategories = shared.shops.getMarketCategories(user); + + it('contains at least the 3 default categories', () => { + expect(shopCategories.length).to.be.greaterThan(2); + }); + + it('does not contain an empty category', () => { + _.each(shopCategories, (category) => { + expect(category.items.length).to.be.greaterThan(0); + }); + }); + + it('items contain required fields', () => { + _.each(shopCategories, (category) => { + _.each(category.items, (item) => { + expect(item).to.have.all.keys(['key', 'text', 'notes', 'value', 'currency', 'locked', 'purchaseType', 'class']); + }); + }); + }); + }); + + describe('questShop', () => { + let shopCategories = shared.shops.getQuestShopCategories(user); + + it('does not contain an empty category', () => { + _.each(shopCategories, (category) => { + expect(category.items.length).to.be.greaterThan(0); + }); + }); + + it('items contain required fields', () => { + _.each(shopCategories, (category) => { + _.each(category.items, (item) => { + expect(item).to.have.all.keys('key', 'text', 'notes', 'value', 'currency', 'locked', 'purchaseType', 'boss', 'class', 'collect', 'drop', 'unlockCondition', 'lvl'); + }); + }); + }); + }); + + describe('timeTravelers', () => { + let shopCategories = shared.shops.getTimeTravelersCategories(user); + + it('does not contain an empty category', () => { + _.each(shopCategories, (category) => { + expect(category.items.length).to.be.greaterThan(0); + }); + }); + + it('items contain required fields', () => { + _.each(shopCategories, (category) => { + _.each(category.items, (item) => { + expect(item).to.have.all.keys('key', 'text', 'value', 'currency', 'locked', 'purchaseType', 'class', 'notes', 'class'); + }); + }); + }); + }); + + describe('seasonalShop', () => { + let shopCategories = shared.shops.getSeasonalShopCategories(user); + + it('does not contain an empty category', () => { + _.each(shopCategories, (category) => { + expect(category.items.length).to.be.greaterThan(0); + }); + }); + + it('items contain required fields', () => { + _.each(shopCategories, (category) => { + _.each(category.items, (item) => { + expect(item).to.have.all.keys('key', 'text', 'notes', 'value', 'currency', 'locked', 'purchaseType', 'specialClass', 'type'); + }); + }); + }); + }); +}); diff --git a/test/helpers/api-integration/translate.js b/test/helpers/api-integration/translate.js index 3ef7d68541..ceaf496b3c 100644 --- a/test/helpers/api-integration/translate.js +++ b/test/helpers/api-integration/translate.js @@ -1,5 +1,5 @@ import i18n from '../../../common/script/i18n'; -i18n.translations = require('../../../website/server/libs/api-v3/i18n').translations; +i18n.translations = require('../../../website/server/libs/i18n').translations; // Use this to verify error messages returned by the server // That way, if the translated string changes, the test diff --git a/test/helpers/api-integration/v2/index.js b/test/helpers/api-integration/v2/index.js deleted file mode 100644 index 8828b9b8ed..0000000000 --- a/test/helpers/api-integration/v2/index.js +++ /dev/null @@ -1,8 +0,0 @@ -// Import requester function, set it up for v2, export it -import { requester } from '../requester'; -requester.setApiVersion('v2'); -export { requester }; - -export { translate } from '../translate'; -export { checkExistence, resetHabiticaDB } from '../../mongo'; -export * from './object-generators'; diff --git a/test/helpers/api-integration/v2/object-generators.js b/test/helpers/api-integration/v2/object-generators.js deleted file mode 100644 index 3cd3c7d1d7..0000000000 --- a/test/helpers/api-integration/v2/object-generators.js +++ /dev/null @@ -1,146 +0,0 @@ -import { - times, - map, -} from 'lodash'; -import Bluebird from 'bluebird'; -import { v4 as generateUUID } from 'uuid'; -import { ApiUser, ApiGroup, ApiChallenge } from '../api-classes'; -import { requester } from '../requester'; - -// Creates a new user and returns it -// If you need the user to have specific requirements, -// such as a balance > 0, just pass in the adjustment -// to the update object. If you want to adjust a nested -// paramter, such as the number of wolf eggs the user has, -// , you can do so by passing in the full path as a string: -// { 'items.eggs.Wolf': 10 } -export async function generateUser (update = {}) { - let username = generateUUID(); - let password = 'password'; - let email = `${username}@example.com`; - - let user = await requester().post('/register', { - username, - email, - password, - confirmPassword: password, - }); - - let apiUser = new ApiUser(user); - - await apiUser.update(update); - - return apiUser; -} - -// Generates a new group. Requires a user object, which -// will will become the groups leader. Takes a details argument -// for the initial group creation and an update argument which -// will update the group via the db -export async function generateGroup (leader, details = {}, update = {}) { - details.type = details.type || 'party'; - details.privacy = details.privacy || 'private'; - details.name = details.name || 'test group'; - - let members; - - if (details.members) { - members = details.members; - delete details.members; - } - - let group = await leader.post('/groups', details); - let apiGroup = new ApiGroup(group); - - const groupMembershipTypes = { - party: { 'party._id': group._id}, - guild: { guilds: [group._id] }, - }; - - await Bluebird.all( - map(members, (member) => { - return member.update(groupMembershipTypes[group.type]); - }) - ); - - await apiGroup.update(update); - await apiGroup.sync(); - return apiGroup; -} - -// This is generate group + the ability to create -// real users to populate it. The settings object -// takes in: -// members: Number - the number of group members to create. Defaults to 0. -// inivtes: Number - the number of users to create and invite to the group. Defaults to 0. -// groupDetails: Object - how to initialize the group -// leaderDetails: Object - defaults for the leader, defaults with a gem balance so the user -// can create the group -// -// Returns an object with -// members: an array of user objects that correspond to the members of the group -// invitees: an array of user objects that correspond to the invitees of the group -// leader: the leader user object -// group: the group object -export async function createAndPopulateGroup (settings = {}) { - let numberOfMembers = settings.members || 0; - let numberOfInvites = settings.invites || 0; - let groupDetails = settings.groupDetails; - let leaderDetails = settings.leaderDetails || { balance: 10 }; - - let groupLeader = await generateUser(leaderDetails); - let group = await generateGroup(groupLeader, groupDetails); - - const groupMembershipTypes = { - party: { 'party._id': group._id}, - guild: { guilds: [group._id] }, - }; - - let members = await Bluebird.all( - times(numberOfMembers, () => { - return generateUser(groupMembershipTypes[group.type]); - }) - ); - - await group.update({ memberCount: numberOfMembers + 1}); - - let invitees = await Bluebird.all( - times(numberOfInvites, () => { - return generateUser(); - }) - ); - - let invitationPromises = invitees.map((invitee) => { - return groupLeader.post(`/groups/${group._id}/invite`, { - uuids: [invitee._id], - }); - }); - - await Bluebird.all(invitationPromises); - - return { - groupLeader, - group, - members, - invitees, - }; -} - -// Generates a new challenge. Requires an ApiGroup object with a -// _leader attribute (given with generateGroup method). The group -// will will become the group that owns the challenge. The group's -// leader will be the one to create the challenge. It takes a details -// argument for the initial challenge creation and an update argument -// which will update the challenge via the db -export async function generateChallenge (challengeCreator, group, details = {}, update = {}) { - details.group = group._id; - details.prize = details.prize || 0; - details.official = details.official || false; - - let challenge = await challengeCreator.post('/challenges', details); - let apiChallenge = new ApiChallenge(challenge); - - await apiChallenge.update(update); - - return apiChallenge; -} diff --git a/test/helpers/api-unit.helper.js b/test/helpers/api-unit.helper.js index 1c567928c6..42b717ae91 100644 --- a/test/helpers/api-unit.helper.js +++ b/test/helpers/api-unit.helper.js @@ -1,4 +1,4 @@ -import '../../website/server/libs/api-v3/i18n'; +import '../../website/server/libs/i18n'; import mongoose from 'mongoose'; import { defaultsDeep as defaults } from 'lodash'; import { model as User } from '../../website/server/models/user'; diff --git a/test/helpers/content.helper.js b/test/helpers/content.helper.js index c1ac3c5657..b97606c256 100644 --- a/test/helpers/content.helper.js +++ b/test/helpers/content.helper.js @@ -1,6 +1,6 @@ require('./globals.helper'); import i18n from '../../common/script/i18n'; -i18n.translations = require('../../website/server/libs/api-v3/i18n').translations; +i18n.translations = require('../../website/server/libs/i18n').translations; export const STRING_ERROR_MSG = 'Error processing the string. Please see Help > Report a Bug.'; export const STRING_DOES_NOT_EXIST_MSG = /^String '.*' not found.$/; diff --git a/test/helpers/globals.helper.js b/test/helpers/globals.helper.js index 253d07e1d4..339a603021 100644 --- a/test/helpers/globals.helper.js +++ b/test/helpers/globals.helper.js @@ -23,12 +23,12 @@ import mongoose from 'mongoose'; // Load nconf for unit tests //------------------------------ if (process.env.LOAD_SERVER === '0') { // when the server is in a different process we simply connect to mongoose - require('../../website/server/libs/api-v3/setupNconf')('./config.json'); + require('../../website/server/libs/setupNconf')('./config.json'); // Use Q promises instead of mpromise in mongoose mongoose.Promise = Bluebird; mongoose.connect(nconf.get('TEST_DB_URI')); } else { // When running tests and the server in the same process - require('../../website/server/libs/api-v3/setupNconf')('./config.json.example'); + require('../../website/server/libs/setupNconf')('./config.json.example'); nconf.set('NODE_DB_URI', nconf.get('TEST_DB_URI')); nconf.set('NODE_ENV', 'test'); nconf.set('IS_TEST', true); diff --git a/test/sanity/README.md b/test/sanity/README.md new file mode 100644 index 0000000000..c4fb006115 --- /dev/null +++ b/test/sanity/README.md @@ -0,0 +1,9 @@ +# Sanity Tests + +## Babel Paths for Production Environment + +In development, we [transpile at server start](https://github.com/HabitRPG/habitrpg/blob/1ed7e21542519abe7a3c601f396e1a07f9b050ae/website/server/index.js#L6-L8). This allows us to work quickly while developing, but is not suitable for production. So, in production we transpile the server code before the app starts. + +This system means that requiring any files from `common/script` in `website/server/**/*.js` must be done through the `common/index.js` module. In development, it'll pass through to the pre-transpiled files, but in production it'll point to the transpiled versions. If you try to require or import a file directly, it will error in production as the server doesn't know what to do with some es2015isms (such as the import statement). + +This test just verifies that none of the files in the server code are calling the common files directly. diff --git a/test/sanity/use-proper-babel-path.js b/test/sanity/use-proper-babel-path.js new file mode 100644 index 0000000000..b70403bece --- /dev/null +++ b/test/sanity/use-proper-babel-path.js @@ -0,0 +1,27 @@ +'use strict'; + +let glob = require('glob').sync; +let readFile = require('fs').readFileSync; + +const IMPORT_REGEX = /(import|require).*common\/script/; + +describe('Use Proper Babel Paths', () => { + it('uses proper babel files in website/server', () => { + let websiteServerPaths = glob('./website/server/**/*.js'); + + if (websiteServerPaths.length === 0) { + throw new Error('Could not find any files in website/server/**/*.js'); + } + + websiteServerPaths.forEach((filePath) => { + let file = readFile(filePath, {encoding: 'utf8'}); + + try { + expect(file).to.not.match(IMPORT_REGEX); + } catch (err) { + // Nicer error reporting if this condition is violated + throw new Error(`${filePath} contains an invalid import statement to common/script, which will work in development but fail in production. See README in this directory for more details.`); + } + }); + }); +}); diff --git a/website/client/css/alerts.styl b/website/client/css/alerts.styl index e5ac4aa042..76b779300c 100644 --- a/website/client/css/alerts.styl +++ b/website/client/css/alerts.styl @@ -14,6 +14,7 @@ display: inline-block .wide-popover + max-width: -moz-max-content max-width: max-content // Small alerts diff --git a/website/client/js/controllers/challengesCtrl.js b/website/client/js/controllers/challengesCtrl.js index bcc62eca72..359db5f985 100644 --- a/website/client/js/controllers/challengesCtrl.js +++ b/website/client/js/controllers/challengesCtrl.js @@ -358,7 +358,7 @@ habitrpg.controller("ChallengesCtrl", ['$rootScope','$scope', 'Shared', 'User', _calculateMaxPrize(gid); - if (gid == TAVERN_ID) { + if (gid == TAVERN_ID && !($scope.newChallenge.prize > 0)) { $scope.newChallenge.prize = 1; } }) diff --git a/website/client/js/controllers/inventoryCtrl.js b/website/client/js/controllers/inventoryCtrl.js index 64c222cb32..84b4ed8d14 100644 --- a/website/client/js/controllers/inventoryCtrl.js +++ b/website/client/js/controllers/inventoryCtrl.js @@ -352,6 +352,11 @@ habitrpg.controller("InventoryCtrl", User.hourglassPurchase({params:{type:type,key:key}}); }; + $scope.marketShopCategories = Shared.shops.getMarketCategories(user); + $scope.questShopCategories = Shared.shops.getQuestShopCategories(user); + $scope.timeTravelersCategories = Shared.shops.getTimeTravelersCategories(user); + $scope.seasonalShopCategories = Shared.shops.getSeasonalShopCategories(user); + function _updateDropAnimalCount(items) { $scope.petCount = Shared.count.beastMasterProgress(items.pets); $scope.mountCount = Shared.count.mountMasterProgress(items.mounts); diff --git a/website/server/controllers/api-v2/auth.js b/website/server/controllers/api-v2/auth.js deleted file mode 100644 index 9b27708614..0000000000 --- a/website/server/controllers/api-v2/auth.js +++ /dev/null @@ -1,362 +0,0 @@ -var _ = require('lodash'); -var validator = require('validator'); -var passport = require('passport'); -var shared = require('../../../../common'); -var async = require('async'); -var utils = require('../../libs/api-v2/utils'); -var nconf = require('nconf'); -var request = require('request'); -import { - model as User, -} from '../../models/user'; -import { - model as EmailUnsubscription, -} from '../../models/emailUnsubscription'; - -var analytics = utils.analytics; -var i18n = require('./../../libs/api-v2/i18n'); - -var isProd = nconf.get('NODE_ENV') === 'production'; - -var api = module.exports; - -var NO_TOKEN_OR_UID = { err: shared.i18n.t('messageAuthMustIncludeTokens') }; -var NO_USER_FOUND = {err: shared.i18n.t('messageAuthNoUserFound') }; -var NO_SESSION_FOUND = { err: shared.i18n.t('messageAuthMustBeLoggedIn') }; -var accountSuspended = function(uuid){ - return { - err: 'Account has been suspended, please contact leslie@habitica.com with your UUID ('+uuid+') for assistance.', - code: 'ACCOUNT_SUSPENDED' - }; -} - -api.auth = function(req, res, next) { - var uid = req.headers['x-api-user']; - var token = req.headers['x-api-key']; - if (!(uid && token)) return res.status(401).json(NO_TOKEN_OR_UID); - User.findOne({_id: uid, apiToken: token}, function(err, user) { - if (err) return next(err); - if (_.isEmpty(user)) return res.status(401).json(NO_USER_FOUND); - if (user.auth.blocked) return res.status(401).json(accountSuspended(user._id)); - - res.locals.wasModified = req.query._v ? +user._v !== +req.query._v : true; - res.locals.user = user; - req.session.userId = user._id; - return next(); - }); -}; - -api.authWithSession = function(req, res, next) { //[todo] there is probably a more elegant way of doing this... - if (!(req.session && req.session.userId)) - return res.status(401).json(NO_SESSION_FOUND); - User.findOne({_id: req.session.userId}, function(err, user) { - if (err) return next(err); - if (_.isEmpty(user)) return res.status(401).json(NO_USER_FOUND); - res.locals.user = user; - next(); - }); -}; - -// TODO passing auth params as query params is not safe as they are logged by browser history, ... -api.authWithUrl = function(req, res, next) { - User.findOne({_id:req.query._id, apiToken:req.query.apiToken}, function(err,user){ - if (err) return next(err); - if (_.isEmpty(user)) return res.status(401).json(NO_USER_FOUND); - res.locals.user = user; - next(); - }); -} - -api.registerUser = function(req, res, next) { - var email = req.body.email && req.body.email.toLowerCase(); - var username = req.body.username; - // Get the lowercase version of username to check that we do not have duplicates - // So we can search for it in the database and then reject the choosen username if 1 or more results are found - var lowerCaseUsername = username && username.toLowerCase(); - - async.auto({ - validate: function(cb) { - if (!(username && req.body.password && email)) - return cb({code:401, err: shared.i18n.t('messageAuthCredentialsRequired')}); - if (req.body.password !== req.body.confirmPassword) - return cb({code:401, err: shared.i18n.t('messageAuthPasswordMustMatch')}); - if (!validator.isEmail(email)) - return cb({code:401, err: ":email invalid"}); - cb(); - }, - findReg: function(cb) { - // Search for duplicates using lowercase version of username - User.findOne({$or:[{'auth.local.email': email}, {'auth.local.lowerCaseUsername': lowerCaseUsername}]}, {'auth.local':1}, cb); - }, - findFacebook: function(cb){ - User.findOne({_id: req.headers['x-api-user'], apiToken: req.headers['x-api-key']}, {auth:1}, cb); - }, - register: ['validate', 'findReg', 'findFacebook', function(cb, data) { - if (data.findReg) { - if (email === data.findReg.auth.local.email) return cb({code:401, err:"Email already taken"}); - // Check that the lowercase username isn't already used - if (lowerCaseUsername === data.findReg.auth.local.lowerCaseUsername) return cb({code:401, err: shared.i18n.t('messageAuthUsernameTaken')}); - } - var salt = utils.makeSalt(); - var newUser = { - auth: { - local: { - username: username, - lowerCaseUsername: lowerCaseUsername, // Store the lowercase version of the username - email: email, // Store email as lowercase - salt: salt, - hashed_password: utils.encryptPassword(req.body.password, salt) - }, - timestamps: {created: +new Date(), loggedIn: +new Date()} - } - }; - // existing user, allow them to add local authentication - if (data.findFacebook) { - data.findFacebook.auth.local = newUser.auth.local; - data.findFacebook.registeredThrough = newUser.registeredThrough; - data.findFacebook.save(cb); - // new user, register them - } else { - newUser.preferences = newUser.preferences || {}; - newUser.preferences.language = req.language; // User language detected from browser, not saved - var user = new User(newUser); - - user.registeredThrough = req.headers['x-client']; - var analyticsData = { - category: 'acquisition', - type: 'local', - gaLabel: 'local', - uuid: user._id, - }; - analytics.track('register', analyticsData) - - user.save(function(err, savedUser){ - if (err) return cb(err); - // Clean previous email preferences - EmailUnsubscription.remove({email: savedUser.auth.local.email}, function(){ - utils.txnEmail(savedUser, 'welcome'); - }); - cb.apply(cb, arguments); - }); - } - }] - }, function(err, data) { - if (err) return err.code ? res.status(err.code).json(err) : next(err); - data.register[0].getTransformedData(function(err, userTransformed){ - if(err) return next(err); - res.status(200).json(userTransformed); - }); - }); -}; - -api.loginLocal = function(req, res, next) { - var username = req.body.username; - var password = req.body.password; - if (!(username && password)) return res.status(401).json({err:'Missing :username or :password in request body, please provide both'}); - var login = validator.isEmail(username) ? - {'auth.local.email':username.toLowerCase()} : // Emails are all lowercase - {'auth.local.username':username}; // Use the username as the user typed it - - User.findOne(login, {auth:1}, function(err, user){ - if (err) return next(err); - if (!user) return res.status(401).json({err:"Uh-oh - your username or password is incorrect.\n- Make sure your username or email is typed correctly.\n- You may have signed up with Facebook, not email. Double-check by trying Facebook login.\n- If you forgot your password, click \"Forgot Password\" on the habitica.com website's login form."}); - if (user.auth.blocked) return res.status(401).json(accountSuspended(user._id)); - // We needed the whole user object first so we can get his salt to encrypt password comparison - User.findOne( - {$and: [login, {'auth.local.hashed_password': utils.encryptPassword(password, user.auth.local.salt)}]} - , {_id:1, apiToken:1} - , function(err, user){ - if (err) return next(err); - if (!user) return res.status(401).json({err:"Uh-oh - your username or password is incorrect.\n- Make sure your username or email is typed correctly.\n- You may have signed up with Facebook, not email. Double-check by trying Facebook login.\n- If you forgot your password, click \"Forgot Password\" on the habitica.com website's login form."}); - res.json({id: user._id,token: user.apiToken}); - password = null; - }); - }); -}; - -/* - POST /user/auth/social - */ -api.loginSocial = function(req, res, next) { - var access_token = req.body.authResponse.access_token, - network = req.body.network; - if (network!=='facebook') - return res.status(401).json({err:"Only Facebook supported currently."}); - async.auto({ - profile: function (cb) { - passport._strategies[network].userProfile(access_token, cb); - }, - user: ['profile', function (cb, results) { - var q = {}; - q['auth.' + network + '.id'] = results.profile.id; - User.findOne(q, {_id: 1, apiToken: 1, auth: 1}, cb); - }], - register: ['profile', 'user', function (cb, results) { - if (results.user) return cb(null, results.user); - // Create new user - var prof = results.profile; - var user = { - preferences: { - language: req.language // User language detected from browser, not saved - }, - auth: { - timestamps: {created: +new Date(), loggedIn: +new Date()} - } - }; - user.auth[network] = prof; - user = new User(user); - user.registeredThrough = req.headers['x-client']; - - user.save(function(err, savedUser){ - // Clean previous email preferences - if(savedUser.auth.facebook.emails && savedUser.auth.facebook.emails[0] && savedUser.auth.facebook.emails[0].value){ - EmailUnsubscription.remove({email: savedUser.auth.facebook.emails[0].value}, function(){ - utils.txnEmail(savedUser, 'welcome'); - }); - } - cb.apply(cb, arguments); - }); - - var analyticsData = { - category: 'acquisition', - type: network, - gaLabel: network, - uuid: user._id, - }; - analytics.track('register', analyticsData) - }] - }, function(err, results){ - if (err) return res.status(401).json({err: err.toString ? err.toString() : err}); - var acct = results.register[0] ? results.register[0] : results.register; - if (acct.auth.blocked) return res.status(401).json(accountSuspended(acct._id)); - return res.status(200).json({id:acct._id, token:acct.apiToken}); - }) -}; - -/** - * DELETE /user/auth/social - */ -api.deleteSocial = function(req,res,next){ - if (!res.locals.user.auth.local.username) - return res.status(401).json({err:"Account lacks another authentication method, can't detach Facebook"}); - //TODO for some reason, the following gives https://gist.github.com/lefnire/f93eb306069b9089d123 - //res.locals.user.auth.facebook = null; - //res.locals.user.auth.save(function(err, saved){ - User.update({_id:res.locals.user._id}, {$unset:{'auth.facebook':1}}, function(err){ - if (err) return next(err); - res.sendStatus(200); - }) -} - -api.resetPassword = function(req, res, next){ - var email = req.body.email && req.body.email.toLowerCase(), // Emails are all lowercase - salt = utils.makeSalt(), - newPassword = utils.makeSalt(), // use a salt as the new password too (they'll change it later) - hashed_password = utils.encryptPassword(newPassword, salt); - - if(!email) return res.status(400).json({err: "Email not provided"}); - - User.findOne({'auth.local.email': email}, function(err, user){ - if (err) return next(err); - if (!user) return res.status(401).json({err:"Sorry, we can't find a user registered with email " + email + "\n- Make sure your email address is typed correctly.\n- You may have signed up with Facebook, not email. Double-check by trying Facebook login."}); - user.auth.local.salt = salt; - user.auth.local.hashed_password = hashed_password; - utils.sendEmail({ - from: "Habitica ", - to: email, - subject: "Password Reset for Habitica", - text: "Password for " + user.auth.local.username + " has been reset to " + newPassword + " Important! Both username and password are case-sensitive -- you must enter both exactly as shown here. We recommend copying and pasting both instead of typing them. Log in at " + nconf.get('BASE_URL') + ". After you've logged in, head to " + nconf.get('BASE_URL') + "/#/options/settings/settings and change your password.", - html: "Password for " + user.auth.local.username + " has been reset to " + newPassword + "

Important! Both username and password are case-sensitive -- you must enter both exactly as shown here. We recommend copying and pasting both instead of typing them.

Log in at " + nconf.get('BASE_URL') + ". After you've logged in, head to " + nconf.get('BASE_URL') + "/#/options/settings/settings and change your password." - }); - user.save(function(err){ - if(err) return next(err); - res.send('New password sent to '+ email); - email = salt = newPassword = hashed_password = null; - }); - }); -}; - -var invalidPassword = function(user, password){ - var hashed_password = utils.encryptPassword(password, user.auth.local.salt); - if (hashed_password !== user.auth.local.hashed_password) - return {code:401, err:"Incorrect password"}; - return false; -} - -api.changeUsername = function(req, res, next) { - var user = res.locals.user; - var username = req.body.username; - var lowerCaseUsername = username && username.toLowerCase(); // we search for the lowercased version to intercept duplicates - - if(!username) return res.status(400).json({err: "Username not provided"}); - async.waterfall([ - function(cb){ - User.findOne({'auth.local.lowerCaseUsername': lowerCaseUsername}, {auth:1}, cb); - }, - function(found, cb){ - if (found) return cb({code:401, err: "Username already taken"}); - if (invalidPassword(user, req.body.password)) return cb(invalidPassword(user, req.body.password)); - user.auth.local.username = username; - user.auth.local.lowerCaseUsername = lowerCaseUsername; - - user.save(cb); - } - ], function(err){ - if (err) return err.code ? res.status(err.code).json(err) : next(err); - res.sendStatus(200); - }) -} - -api.changeEmail = function(req, res, next){ - var email = req.body.email && req.body.email.toLowerCase(); // emails are all lowercase - if(!email) return res.status(400).json({err: "Email not provided"}); - - async.waterfall([ - function(cb){ - User.findOne({'auth.local.email': email}, {auth:1}, cb); - }, - function(found, cb){ - if(found) return cb({code:401, err: shared.i18n.t('messageAuthEmailTaken')}); - if (invalidPassword(res.locals.user, req.body.password)) return cb(invalidPassword(res.locals.user, req.body.password)); - res.locals.user.auth.local.email = email; - res.locals.user.save(cb); - } - ], function(err){ - if (err) return err.code ? res.status(err.code).json(err) : next(err); - res.sendStatus(200); - }) -} - -api.changePassword = function(req, res, next) { - var user = res.locals.user, - oldPassword = req.body.oldPassword, - newPassword = req.body.newPassword, - confirmNewPassword = req.body.confirmNewPassword; - - if (newPassword != confirmNewPassword) - return res.status(401).json({err: "Password & Confirm don't match"}); - - var salt = user.auth.local.salt, - hashed_old_password = utils.encryptPassword(oldPassword, salt), - hashed_new_password = utils.encryptPassword(newPassword, salt); - - if (hashed_old_password !== user.auth.local.hashed_password) - return res.status(401).json({err:"Old password doesn't match"}); - - user.auth.local.hashed_password = hashed_new_password; - user.save(function(err, saved){ - if (err) next(err); - res.sendStatus(200); - }) -}; - -// DISABLED FOR API v2 -/*api.setupPassport = function(router) { - - router.get('/logout', i18n.getUserLanguage, function(req, res) { - req.logout(); - delete req.session.userId; - res.redirect('/'); - }) - -};*/ diff --git a/website/server/controllers/api-v2/challenges.js b/website/server/controllers/api-v2/challenges.js deleted file mode 100644 index c5d716d88e..0000000000 --- a/website/server/controllers/api-v2/challenges.js +++ /dev/null @@ -1,428 +0,0 @@ -// @see ../routes for routing - -var _ = require('lodash'); -var nconf = require('nconf'); -var async = require('async'); -var shared = require('../../../../common'); -import { - model as User, -} from '../../models/user'; -import { - model as Group, - basicFields as basicGroupFields, - TAVERN_ID, -} from '../../models/group'; -import { - model as Challenge, -} from '../../models/challenge'; -import * as Tasks from '../../models/task'; -var logging = require('./../../libs/api-v2/logging'); -var csvStringify = require('csv-stringify'); -var utils = require('../../libs/api-v2/utils'); -var api = module.exports; -var pushNotify = require('./pushNotifications'); -import Bluebird from 'bluebird'; -import v3MembersController from '../api-v3/members'; -/* - ------------------------------------------------------------------------ - Challenges - ------------------------------------------------------------------------ -*/ - -var nameFields = 'profile.name'; - -api.list = async function(req, res, next) { - try { - var user = res.locals.user; - - let challenges = await Challenge.find({ - $or: [ - {_id: {$in: user.challenges}}, // Challenges where the user is participating - {group: {$in: user.getGroups()}}, // Challenges in groups where I'm a member - {leader: user._id}, // Challenges where I'm the leader - ], - _id: {$ne: '95533e05-1ff9-4e46-970b-d77219f199e9'}, // remove the Spread the Word Challenge for now, will revisit when we fix the closing-challenge bug TODO revisit - }) - .sort('-official -timestamp') - // .populate('group', basicGroupFields) - // .populate('leader', nameFields) - .exec(); - - let resChals = challenges.map(challenge => { - let obj = challenge.toJSON(); - - obj._isMember = user.challenges.indexOf(challenge._id) !== -1; - return obj; - }); - - // Instead of populate we make a find call manually because of https://github.com/Automattic/mongoose/issues/3833 - await Bluebird.all(resChals.map((chal, index) => { - return Bluebird.all([ - User.findById(chal.leader).select(nameFields).exec(), - Group.findById(chal.group).select(basicGroupFields).exec(), - ]).then(populatedData => { - resChals[index].leader = populatedData[0] ? populatedData[0].toJSON({minimize: true}) : null; - resChals[index].group = populatedData[1] ? populatedData[1].toJSON({minimize: true}) : null; - }); - })); - - res.json(resChals); - } catch (err) { - next(err); - } -} - -// GET -api.get = async function(req, res, next) { - try { - let user = res.locals.user; - let challengeId = req.params.cid; - - let challenge = await Challenge.findById(challengeId) - // Don't populate the group as we'll fetch it manually later - // .populate('leader', nameFields) - .exec(); - if (!challenge) return res.status(404).json({err: 'Challenge ' + req.params.cid + ' not found'}); - - // Fetching basic group data - let group = await Group.getGroup({user, groupId: challenge.group, optionalMembership: true}); - if (!group || !challenge.canView(user, group)) return res.status(404).json({err: 'Challenge ' + req.params.cid + ' not found'}); - - let leaderRes = await User.findById(challenge.leader).select('profile.name').exec(); - leaderRes = leaderRes ? leaderRes.toJSON({minimize: true}) : null; - - challenge.getTransformedData({ - populateMembers: 'profile.name', - cb (err, transformedChal) { - transformedChal.group = group.toJSON({minimize: true}); - transformedChal.leader = leaderRes; - transformedChal._isMember = user.challenges.indexOf(transformedChal._id) !== -1; - res.json(transformedChal); - } - }); - } catch (err) { - next(err); - } -} - -api.csv = function(req, res, next) { - var cid = req.params.cid; - req.params.challengeId = cid; - v3MembersController.exportChallengeCsv.handler(req, res, next).catch(next); -} - -api.getMember = function(req, res, next) { - var cid = req.params.cid; - var uid = req.params.uid; - - req.params.memberId = uid; - req.params.challengeId = cid; - v3MembersController.getChallengeMemberProgress.handler(req, res, next) - .then(result => { - let newResult = { - profile: { - name: result.profile.name, - }, - habits: [], - dailys: [], - todos: [], - rewards: [], - }; - - let tasks = result.tasks; - tasks.forEach(task => { - let taskObj = task.toJSONV2(); - newResult[taskObj.type + 's'].push(taskObj); - }); - - res.json(newResult); - }) - .catch(next); -} - -// CREATE -api.create = async function(req, res, next){ - try { - var user = res.locals.user; - - let groupId = req.body.group; - let prize = req.body.prize; - - let group = await Group.getGroup({user, groupId, fields: '-chat', mustBeMember: true}); - if (!group) return res.status(404).json({err:"Group." + req.body.group + " not found"}); - if (!group.isMember(user)) return res.status(404).json({err:"Group." + req.body.group + " not found"}); - - if (group.leaderOnly && group.leaderOnly.challenges && group.leader !== user._id) { - return res.status(401).json({err:"Only the group leader can create challenges"}); - } - - if (group._id === TAVERN_ID && prize < 1) { - return res.status(401).json({err: 'Prize must be at least 1 Gem for public challenges.'}) - } - - if (prize > 0) { - let groupBalance = group.balance && group.leader === user._id ? group.balance : 0; - let prizeCost = prize / 4; - - if (prizeCost > user.balance + groupBalance) { - return res.status(401).json({err: 'You can\'t afford this prize. Purchase more gems or lower the prize amount.'}); - } - - if (groupBalance >= prizeCost) { - // Group pays for all of prize - group.balance -= prizeCost; - } else if (groupBalance > 0) { - // User pays remainder of prize cost after group - let remainder = prizeCost - group.balance; - group.balance = 0; - user.balance -= remainder; - } else { - // User pays for all of prize - user.balance -= prizeCost; - } - } - - group.challengeCount += 1; - - req.body.leader = user._id; - req.body.official = user.contributor.admin && req.body.official; - let challenge = new Challenge(Challenge.sanitize(req.body)); - - // First validate challenge so we don't save group if it's invalid (only runs sync validators) - let challengeValidationErrors = challenge.validateSync(); - if (challengeValidationErrors) throw challengeValidationErrors; - - req.body.habits = req.body.habits || []; - req.body.todos = req.body.todos || []; - req.body.dailys = req.body.dailys || []; - req.body.rewards = req.body.rewards || []; - - var chalTasks = req.body.habits.concat(req.body.rewards) - .concat(req.body.dailys).concat(req.body.todos) - .map(v2Task => Tasks.Task.fromJSONV2(v2Task)); - - chalTasks = chalTasks.map(function(task) { - var newTask = new Tasks[task.type](Tasks.Task.sanitize(task)); - newTask.challenge.id = challenge._id; - return newTask.save(); - }); - - let results = await Bluebird.all([challenge.save({ - validateBeforeSave: false, // already validated - }), group.save()].concat(chalTasks)); - let savedChal = results[0]; - - await savedChal.syncToUser(user); // (it also saves the user) - - savedChal.getTransformedData({ - cb (err, transformedChal) { - res.status(201).json(transformedChal); - }, - }); - } catch (err) { - next(err); - } -} - -// UPDATE -api.update = function(req, res, next){ - var cid = req.params.cid; - var user = res.locals.user; - var before; - var updatedTasks; - - async.waterfall([ - function(cb){ - // We first need the original challenge data, since we're going to compare against new & decide to sync users - Challenge.findById(cid, cb); - }, - function(chal, cb){ - if(!chal) return cb({chal: null}); - - chal.getTasks(function(err, tasks){ - cb(err, { - chal: chal, - tasks: tasks - }); - }); - }, - function(_before, cb) { - if (!_before.chal) return cb('Challenge ' + cid + ' not found'); - if (_before.chal.leader != user._id && !user.contributor.admin) return cb({code: 401, err: shared.i18n.t('noPermissionEditChallenge', req.language)}); - // Update the challenge, since syncing will need the updated challenge. But store `before` we're going to do some - // before-save / after-save comparison to determine if we need to sync to users - before = {chal: _before.chal, tasks: _before.tasks}; - var chalAttrs = _.pick(req.body, 'name shortName description date'.split(' ')); - async.parallel({ - chal: function(cb1){ - Challenge.findByIdAndUpdate(cid, {$set:chalAttrs}, {new: true}, cb1); - }, - tasks: function(cb1) { - // Convert to map of {id: task} so we can easily match them - var _beforeClonedTasks = _before.tasks; - updatedTasks = _.object(_.pluck(_beforeClonedTasks, '_id'), _beforeClonedTasks); - var newTasks = req.body.habits.concat(req.body.dailys) - .concat(req.body.todos).concat(req.body.rewards); - - var newTasksObj = _.object(_.pluck(newTasks, '_id'), newTasks); - async.forEachOf(newTasksObj, function(newTask, taskId, cb2){ - // some properties can't be changed - newTask = Tasks.Task.sanitize(newTask); - // we have to convert task to an object because otherwise things don't get merged correctly. Bad for performances? - _.assign(updatedTasks[taskId], shared.ops.updateTask(updatedTasks[taskId].toObject(), {body: newTask})); - _before.chal.updateTask(updatedTasks[taskId]).then(cb2).catch(cb2); - }, cb1); - } - }, cb); - }, - ], function(err, saved){ - if(err) { - return err.code ? res.json(err.code, err) : next(err); - } - - saved.chal.getTransformedData({cb: function(err, newChal){ - if(err) return next(err); - res.json(newChal); - }}) - cid = user = before = null; - }); -} - -/** - * Delete & close - */ -api.delete = async function(req, res, next){ - try { - var user = res.locals.user; - var cid = req.params.cid; - - let challenge = await Challenge.findOne({_id: req.params.cid}).exec(); - if (!challenge) return next('Challenge ' + cid + ' not found'); - if (!challenge.canModify(user)) return next(shared.i18n.t('noPermissionCloseChallenge')); - - // Close channel in background, some ops are run in the background without `await`ing - await challenge.closeChal({broken: 'CHALLENGE_DELETED'}); - res.sendStatus(200); - } catch (err) { - next(err); - } -} - -/** - * Select Winner & Close - */ -api.selectWinner = async function(req, res, next) { - try { - if (!req.query.uid) return res.status(401).json({err: 'Must select a winner'}); - - let challenge = await Challenge.findOne({_id: req.params.cid}).exec(); - if (!challenge) return next('Challenge ' + req.params.cid + ' not found'); - if (!challenge.canModify(res.locals.user)) return next(shared.i18n.t('noPermissionCloseChallenge')); - - let winner = await User.findOne({_id: req.query.uid}).exec(); - if (!winner || winner.challenges.indexOf(challenge._id) === -1) return next('Winner ' + req.query.uid + ' not found.'); - - // Close channel in background, some ops are run in the background without `await`ing - await challenge.closeChal({broken: 'CHALLENGE_CLOSED', winner}); - res.respond(200, {}); - } catch (err) { - next(err); - } -} - -api.join = async function(req, res, next){ - try { - var user = res.locals.user; - var cid = req.params.cid; - - let challenge = await Challenge.findOne({ _id: cid }); - if (!challenge) return next(shared.i18n.t('challengeNotFound')); - if (challenge.isMember(user)) return next(shared.i18n.t('userAlreadyInChallenge')); - - let group = await Group.getGroup({user, groupId: challenge.group, optionalMembership: true}); - if (!group || !challenge.hasAccess(user, group)) return next(shared.i18n.t('challengeNotFound')); - - challenge.memberCount += 1; - - // Add all challenge's tasks to user's tasks and save the challenge - await Bluebird.all([challenge.syncToUser(user), challenge.save()]); - - challenge.getTransformedData({ - cb (err, transformedChal) { - transformedChal._isMember = true; - res.json(transformedChal); - } - }); - } catch (e) { - next(e); - } -} - -api.leave = async function(req, res, next){ - try { - var user = res.locals.user; - var cid = req.params.cid; - // whether or not to keep challenge's tasks. strictly default to true if "keep-all" isn't provided - var keep = (/^remove-all/i).test(req.query.keep) ? 'remove-all' : 'keep-all'; - - let challenge = await Challenge.findOne({ _id: cid }); - if (!challenge) return next(shared.i18n.t('challengeNotFound')); - - let group = await Group.getGroup({user, groupId: challenge.group, fields: '_id type privacy'}); - if (!group || !challenge.canView(user, group)) return next(shared.i18n.t('challengeNotFound')); - - if (!challenge.isMember(user)) return next(shared.i18n.t('challengeMemberNotFound')); - - challenge.memberCount -= 1; - - // Unlink challenge's tasks from user's tasks and save the challenge - await Bluebird.all([challenge.unlinkTasks(user, keep), challenge.save()]); - - challenge.getTransformedData({ - cb (err, transformedChal) { - transformedChal._isMember = false; - res.json(transformedChal); - } - }); - } catch (e) { - next(e); - } -} - -import { removeFromArray } from '../../libs/api-v3/collectionManipulators'; - -api.unlink = async function(req, res, next) { - try { - var user = res.locals.user; - var tid = req.params.id; - var cid; - if (!req.query.keep) - return res.status(400).json({err: 'Provide unlink method as ?keep=keep-all (keep, keep-all, remove, remove-all)'}); - - let keep = req.query.keep; - let task = await Tasks.Task.findOne({ - _id: tid, - userId: user._id, - }).exec(); - - if (!task) return next(shared.i18n.t('taskNotFound')); - if (!task.challenge.id) return next(shared.i18n.t('cantOnlyUnlinkChalTask')); - - cid = task.challenge.id; - if (keep === 'keep') { - task.challenge = {}; - await task.save(); - } else { // remove - if (task.type !== 'todo' || !task.completed) { // eslint-disable-line no-lonely-if - removeFromArray(user.tasksOrder[`${task.type}s`], tid); - await Bluebird.all([user.save(), task.remove()]); - } else { - await task.remove(); - } - } - - res.sendStatus(200); - } catch (e) { - next(e); - } -} diff --git a/website/server/controllers/api-v2/coupon.js b/website/server/controllers/api-v2/coupon.js deleted file mode 100644 index 17cd289bd3..0000000000 --- a/website/server/controllers/api-v2/coupon.js +++ /dev/null @@ -1,47 +0,0 @@ -var _ = require('lodash'); -import { - model as Coupon, -} from '../../models/coupon'; -var api = module.exports; -var csvStringify = require('csv-stringify'); -var async = require('async'); - -api.ensureAdmin = function(req, res, next) { - if (!res.locals.user.contributor.sudo) return res.status(401).json({err:"You don't have admin access"}); - next(); -} - -api.generateCoupons = function(req,res,next) { - let count = Number(req.query.count); - Coupon.generate(req.params.event, count, function(err){ - if(err) return next(err); - res.sendStatus(200); - }); -} - -api.getCoupons = function(req,res,next) { - var options = {sort:'seq'}; - if (req.query.limit) options.limit = req.query.limit; - if (req.query.skip) options.skip = req.query.skip; - Coupon.find({},{}, options, function(err,coupons){ - let output = [['code']].concat(_.map(coupons, function(c){ - return [c._id]; - })) - - res.set({ - 'Content-Type': 'text/csv', - 'Content-disposition': 'attachment; filename=habitica-coupons.csv', - }); - csvStringify(output, (err, csv) => { - if (err) return next(err); - res.status(200).send(csv); - }); - }); -} - -api.enterCode = function(req,res,next) { - Coupon.apply(res.locals.user,req.params.code,function(err,user){ - if (err) return res.status(400).json({err:err}); - res.json(user); - }); -} diff --git a/website/server/controllers/api-v2/dataexport.js b/website/server/controllers/api-v2/dataexport.js deleted file mode 100644 index f0aad2b35c..0000000000 --- a/website/server/controllers/api-v2/dataexport.js +++ /dev/null @@ -1,153 +0,0 @@ -var _ = require('lodash'); -var express = require('express'); -var csvStringify = require('csv-stringify'); -var nconf = require('nconf'); -var moment = require('moment'); -var js2xmlparser = require("js2xmlparser"); -var pd = require('pretty-data').pd; -import { - model as User, -} from '../../models/user'; - -// Avatar screenshot/static-page includes -//var Pageres = require('pageres'); //https://github.com/sindresorhus/pageres -//var AWS = require('aws-sdk'); -//AWS.config.update({accessKeyId: nconf.get("S3:accessKeyId"), secretAccessKey: nconf.get("S3:secretAccessKey")}); -//var s3Stream = require('s3-upload-stream')(new AWS.S3()); //https://github.com/nathanpeck/s3-upload-stream -//var bucket = nconf.get("S3:bucket"); -//var request = require('request'); - -/* - ------------------------------------------------------------------------ - Data export - ------------------------------------------------------------------------ -*/ - -var dataexport = module.exports; - -dataexport.history = function(req, res) { - var user = res.locals.user; - var output = [ - ["Task Name", "Task ID", "Task Type", "Date", "Value"] - ]; - _.each(user.tasks, function(task) { - _.each(task.history, function(history) { - output.push([ - task.text, - task.id, - task.type, - moment(history.date).format("MM-DD-YYYY HH:mm:ss"), - history.value - ]); - }); - }); - - res.set({ - 'Content-Type': 'text/csv', - 'Content-disposition': 'attachment; filename=habitica-tasks-history.csv', - }); - - csvStringify(output, (err, csv) => { - if (err) return next(err); - res.status(200).send(csv); - }); -}; - -var userdata = function(user) { - if(user.auth && user.auth.local) { - delete user.auth.local.salt; - delete user.auth.local.hashed_password; - } - return user; -} - -dataexport.leanuser = function(req, res, next) { - User.findOne({_id: res.locals.user._id}).lean().exec(function(err, user) { - if (err) return res.status(500).json({err: err}); - if (_.isEmpty(user)) return res.status(401).json(NO_USER_FOUND); - res.locals.user = user; - return next(); - }); -}; - -dataexport.userdata = { - xml: function(req, res) { - var user = userdata(res.locals.user); - return res.xml({data: JSON.stringify(user), rootname: 'user'}); - }, - json: function(req, res) { - var user = userdata(res.locals.user); - return res.jsonstring(user); - } -} - -/* - ------------------------------------------------------------------------ - Express Extensions (should be refactored into a module) - ------------------------------------------------------------------------ -*/ - -var expressres = express.response || http.ServerResponse.prototype; - -expressres.xml = function(obj, headers, status) { - var body = ''; - this.charset = this.charset || 'utf-8'; - this.header('Content-Type', 'text/xml'); - this.header('Content-Disposition', 'attachment'); - body = pd.xml(js2xmlparser(obj.rootname,obj.data)); - return this.send(body, headers, status); -}; - -expressres.jsonstring = function(obj, headers, status) { - var body = ''; - this.charset = this.charset || 'utf-8'; - this.header('Content-Type', 'application/json'); - this.header('Content-Disposition', 'attachment'); - body = pd.json(JSON.stringify(obj)); - return this.send(body, headers, status); -}; - -/* - ------------------------------------------------------------------------ - Static page and image screenshot of avatar - ------------------------------------------------------------------------ - */ - - -dataexport.avatarPage = function(req, res) { - User.findById(req.params.uuid).select('stats profile items achievements preferences backer contributor').exec(function(err, user){ - res.render('avatar-static', { - title: user.profile.name, - env: _.defaults({user:user}, res.locals.habitrpg) - }); - }) -}; - -dataexport.avatarImage = function(req, res, next) { - var filename = 'avatars/'+req.params.uuid+'.png'; - request.head('https://'+bucket+'.s3.amazonaws.com/'+filename, function(err,response,body) { - // cache images for 10 minutes on aws, else upload a new one - if (response.statusCode==200 && moment().diff(response.headers['last-modified'], 'minutes') < 10) - return res.redirect(301, 'https://' + bucket + '.s3.amazonaws.com/' + filename); - new Pageres()//{delay:1} - .src(nconf.get('BASE_URL') + '/export/avatar-' + req.params.uuid + '.html', ['140x147'], {crop: true, filename: filename.replace('.png', '')}) - .run() - .then(function (file) { - var upload = s3Stream.upload({ - Bucket: bucket, - Key: filename, - ACL: "public-read", - StorageClass: "REDUCED_REDUNDANCY", - ContentType: "image/png", - Expires: +moment().add({minutes: 3}) - }); - upload.on('error', function (err) { - next(err); - }); - upload.on('uploaded', function (details) { - res.redirect(details.Location); - }); - file[0].pipe(upload); - }).catch(next); - }) -}; diff --git a/website/server/controllers/api-v2/groups.js b/website/server/controllers/api-v2/groups.js deleted file mode 100644 index 961faabb0f..0000000000 --- a/website/server/controllers/api-v2/groups.js +++ /dev/null @@ -1,1222 +0,0 @@ -'use strict'; -// @see ../routes for routing - -function clone(a) { - return JSON.parse(JSON.stringify(a)); -} - -var _ = require('lodash'); -var nconf = require('nconf'); -var async = require('async'); -var Bluebird = require('bluebird'); -var utils = require('./../../libs/api-v2/utils'); -var shared = require('../../../../common'); - -import { removeFromArray } from '../../libs/api-v3/collectionManipulators'; - -import { - model as User, -} from './../../models/user'; -import { - model as Group, - TAVERN_ID, -} from './../../models/group'; -import { - model as Challenge, -} from './../../models/challenge'; -import { - model as EmailUnsubscription, -} from './../../models/emailUnsubscription'; - -var isProd = nconf.get('NODE_ENV') === 'production'; -var api = module.exports; -var pushNotify = require('./pushNotifications'); -var analytics = utils.analytics; - -/* - ------------------------------------------------------------------------ - Groups - ------------------------------------------------------------------------ -*/ - -var partyFields = api.partyFields = 'profile preferences stats achievements party backer contributor auth.timestamps items'; -var nameFields = 'profile.name'; -var challengeFields = '_id name'; -var guildPopulate = {path: 'members', select: nameFields, options: {limit: 15} }; -const FLAG_REPORT_EMAILS = nconf.get('FLAG_REPORT_EMAIL').split(',').map(email => {return {email, canSend: true}}); - -/** - * For parties, we want a lot of member details so we can show their avatars in the header. For guilds, we want very - * limited fields - and only a sampling of the members, beacuse they can be in the thousands - * @param type: 'party' or otherwise - * @param q: the Mongoose query we're building up - * @param additionalFields: if we want to populate some additional field not fetched normally - * pass it as a string, parties only - */ -var populateQuery = function(type, q, additionalFields){ - if (type == 'party') - q.populate('members', partyFields + (additionalFields ? (' ' + additionalFields) : '')); - else - q.populate(guildPopulate); - q.populate('leader', nameFields); - q.populate('invites', nameFields); - q.populate({ - path: 'challenges', - match: (type=='habitrpg') ? {_id:{$ne:'95533e05-1ff9-4e46-970b-d77219f199e9'}} : undefined, // remove the Spread the Word Challenge for now, will revisit when we fix the closing-challenge bug - select: challengeFields, - options: {sort: {official: -1, timestamp: -1}} - }); - return q; -} - -/** - * Fetch groups list. This no longer returns party or tavern, as those can be requested indivdually - * as /groups/party or /groups/tavern - */ -api.list = function(req, res, next) { - var user = res.locals.user; - var groupFields = 'name description memberCount balance leader'; - var sort = '-memberCount'; - var type = req.query.type || 'party,guilds,public,tavern'; - - async.parallel({ - - // unecessary given our ui-router setup - party: function(cb){ - if (!~type.indexOf('party')) return cb(null, {}); - Group.findOne({_id: user.party._id, type: 'party'}) - .select(groupFields).exec(function(err, party){ - if (err) return cb(err); - if (!party) return cb(null, []); - party.getTransformedData({cb: function (err, transformedParty) { - if (err) return cb(err); - cb(null, (transformedParty === null ? [] : [transformedParty])); // return as an array for consistent ngResource use - }}); - }); - }, - - guilds: function(cb) { - if (!~type.indexOf('guilds')) return cb(null, []); - Group.find({_id: {'$in': user.guilds}, type:'guild'}) - .select(groupFields).sort(sort).exec(function (err, guilds) { - if (err) return cb(err); - async.map(guilds, function (guild, cb1) { - guild.getTransformedData({cb: cb1}) - }, function(err, guildsTransormed) { - cb(err, guildsTransormed); - }); - }); - }, - - 'public': function(cb) { - if (!~type.indexOf('public')) return cb(null, []); - Group.find({privacy: 'public'}) - .select(groupFields) - .sort(sort) - .lean() - .exec(function(err, groups){ - if (err) return cb(err); - _.each(groups, function(g){ - // To save some client-side performance, don't send down the full members arr, just send down temp var _isMember - if (user.guilds.indexOf(g._id) !== -1) g._isMember = true; - }); - cb(null, groups); - }); - }, - - // unecessary given our ui-router setup - tavern: function(cb) { - if (!~type.indexOf('tavern')) return cb(null, {}); - Group.findById(TAVERN_ID).select(groupFields).exec(function(err, tavern){ - if (err) return cb(err); - tavern.getTransformedData({cb: function (err, transformedTavern) { - if (err) return cb(err); - cb(null, ([transformedTavern])); // return as an array for consistent ngResource use - }}); - }); - } - - }, function(err, results){ - if (err) return next(err); - // ngResource expects everything as arrays. We used to send it down as a structured object: {public:[], party:{}, guilds:[], tavern:{}} - // but unfortunately ngResource top-level attrs are considered the ngModels in the list, so we had to do weird stuff and multiple - // requests to get it to work properly. Instead, we're not depending on the client to do filtering / organization, and we're - // just sending down a merged array. Revisit - var arr = _.reduce(results, function(m,v){ - if (_.isEmpty(v)) return m; - return m.concat(_.isArray(v) ? v : [v]); - }, []) - res.json(arr); - - user = groupFields = sort = type = null; - }) -}; - -/** - * Get group - * TODO: implement requesting fields ?fields=chat,members - */ -api.get = function(req, res, next) { - var user = res.locals.user; - var gid = req.params.gid; - let isUserGuild = user.guilds.indexOf(gid) !== -1; - - var q; - - if (gid === 'party' || gid === user.party._id) { - q = Group.findOne({_id: user.party._id, type: 'party'}) - } else { - - if (isUserGuild) { - q = Group.findOne({type: 'guild', _id: gid}); - } else if (gid === 'habitrpg') { - q = Group.findOne({_id: TAVERN_ID}); - } else { - q = Group.findOne({type: 'guild', privacy: 'public', _id: gid}); - } - } - - q.populate('leader', nameFields); - - //populateQuery(gid, q); - q.exec(function(err, group){ - if (err) return next(err); - if(!group){ - if(gid !== 'party') return res.status(404).json({err: shared.i18n.t('messageGroupNotFound')}); - - // Don't send a 404 when querying for a party even if it doesn't exist - // so that users with no party don't get a 404 on every access to the site - return res.json(group); - } - - group.getTransformedData({ - cb: function (err, transformedGroup) { - if (err) return next(err); - - if (!user.contributor.admin) { - _purgeFlagInfoFromChat(transformedGroup, user); - } - - //Since we have a limit on how many members are populate to the group, we want to make sure the user is always in the group - var userInGroup = _.find(transformedGroup.members, function(member){ return member._id == user._id; }); - if ((gid === 'party' || isUserGuild) && !userInGroup) { - transformedGroup.members.splice(0,1); - transformedGroup.members.push(user); - } - - res.json(transformedGroup); - }, - populateMembers: group.type === 'party' ? partyFields : nameFields, - populateInvites: nameFields, - populateChallenges: challengeFields, - }); - }); -}; - - -api.create = function(req, res, next) { - var group = new Group(req.body); - var user = res.locals.user; - //group.members = [user._id]; - group.leader = user._id; - if (!group.name) group.name = 'group name'; - - if(group.type === 'guild'){ - user.guilds.push(group._id); - if(user.balance < 1) return res.status(401).json({err: shared.i18n.t('messageInsufficientGems')}); - - group.balance = 1; - user.balance--; - - async.waterfall([ - function(cb){user.save(cb)}, - function(saved,ct,cb){group.save(cb)}, - function(saved,ct,cb){ - saved.getTransformedData({ - populateMembers: nameFields, - cb, - }) - } - ],function(err,groupTransformed){ - if (err) return next(err); - res.json(groupTransformed); - group = user = null; - }); - - } else{ - if (user.party._id) return res.status(400).json({err:shared.i18n.t('messageGroupAlreadyInParty')}); - user.party._id = group._id; - user.save(function (err) { - if (err) return next(err); - group.save(function(err, saved) { - if (err) return next(err); - saved.getTransformedData({ - populateMembers: nameFields, - cb (err, groupTransformed) { - res.json(groupTransformed); - }, - }); - }); - }) - } -} - -api.update = function(req, res, next) { - var group = res.locals.group; - var user = res.locals.user; - - if(group.leader !== user._id) - return res.status(401).json({err: shared.i18n.t('messageGroupOnlyLeaderCanUpdate')}); - - 'name description logo logo leaderMessage leader leaderOnly'.split(' ').forEach(function(attr){ - if (req.body[attr]) group[attr] = req.body[attr]; - }); - - group.save(function(err, saved){ - if (err) return next(err); - - res.sendStatus(204); - }); -} - -// TODO remove from api object? -api.attachGroup = function(req, res, next) { - var user = res.locals.user; - var gid = req.params.gid === 'party' ? user.party._id : req.params.gid; - if (gid === 'habitrpg') gid = TAVERN_ID; - - let q = Group.findOne({_id: gid}) - - q.exec(function(err, group){ - if(err) return next(err); - if(!group) return res.status(404).json({err: shared.i18n.t('messageGroupNotFound')}); - - if (!user.contributor.admin) { - _purgeFlagInfoFromChat(group, user); - } - - res.locals.group = group; - next(); - }); -} - -api.getChat = function(req, res, next) { - // TODO: This code is duplicated from api.get - pull it out into a function to remove duplication. - var user = res.locals.user; - var gid = req.params.gid; - - var q; - let isUserGuild = user.guilds.indexOf(gid) !== -1; - - if (gid === 'party' || gid === user.party._id) { - q = Group.findOne({_id: user.party._id, type: 'party'}) - } else { - if (isUserGuild) { - q = Group.findOne({type: 'guild', _id: gid}); - } else if (gid === 'habitrpg') { - q = Group.findOne({_id: TAVERN_ID}); - } else { - q = Group.findOne({type: 'guild', privacy: 'public', _id: gid}); - } - } - - q.exec(function(err, group){ - if (err) return next(err); - if (!group && gid!=='party') return res.status(404).json({err: shared.i18n.t('messageGroupNotFound')}); - - res.json(res.locals.group.chat); - gid = null; - }); -}; - -/** - * TODO make this it's own ngResource so we don't have to send down group data with each chat post - */ -api.postChat = function(req, res, next) { - if(!req.query.message) { - return res.status(400).json({err: shared.i18n.t('messageGroupChatBlankMessage')}); - } else { - var user = res.locals.user - var group = res.locals.group; - if (group.type!='party' && user.flags.chatRevoked) return res.status(401).json({err:'Your chat privileges have been revoked.'}); - var lastClientMsg = req.query.previousMsg; - var chatUpdated = (lastClientMsg && group.chat && group.chat[0] && group.chat[0].id !== lastClientMsg) ? true : false; - - group.sendChat(req.query.message, user); // TODO this should be body, but ngResource is funky - - if (group.type === 'party') { - user.party.lastMessageSeen = group.chat[0].id; - user.save(); - } - - group.save(function(err, saved){ - if (err) return next(err); - chatUpdated ? res.json({chat: group.chat}) : res.json({message: saved.chat[0]}); - group = chatUpdated = null; - }); - } -} - -api.deleteChatMessage = function(req, res, next){ - var user = res.locals.user - var group = res.locals.group; - var message = _.find(group.chat, {id: req.params.messageId}); - - if(!message) return res.status(404).json({err: "Message not found!"}); - - if(user._id !== message.uuid && !(user.backer && user.contributor.admin)) - return res.status(401).json({err: "Not authorized to delete this message!"}) - - var lastClientMsg = req.query.previousMsg; - var chatUpdated = (lastClientMsg && group.chat && group.chat[0] && group.chat[0].id !== lastClientMsg) ? true : false; - - Group.update({_id:group._id}, {$pull:{chat:{id: req.params.messageId}}}, function(err){ - if(err) return next(err); - chatUpdated ? res.json({chat: group.chat}) : res.sendStatus(204); - group = chatUpdated = null; - }); -} - -api.flagChatMessage = function(req, res, next){ - var user = res.locals.user - var group = res.locals.group; - var message = _.find(group.chat, {id: req.params.mid}); - - if(!message) return res.status(404).json({err: shared.i18n.t('messageGroupChatNotFound')}); - if(message.uuid == user._id) return res.status(401).json({err: shared.i18n.t('messageGroupChatFlagOwnMessage')}); - - User.findOne({_id: message.uuid}, {auth: 1}, function(err, author){ - if(err) return next(err); - - // Log user ids that have flagged the message - if(!message.flags) message.flags = {}; - if(message.flags[user._id] && !user.contributor.admin) return res.status(401).json({err: shared.i18n.t('messageGroupChatFlagAlreadyReported')}); - message.flags[user._id] = true; - - // Log total number of flags (publicly viewable) - if(!message.flagCount) message.flagCount = 0; - if(user.contributor.admin){ - // Arbitraty amount, higher than 2 - message.flagCount = 5; - } else { - message.flagCount++ - } - - Group.update({_id: group._id, 'chat.id': message.id}, {'$set': { - 'chat.$.flags': message.flags, - 'chat.$.flagCount': message.flagCount, - }}, function(err) { - if (err) return next(err); - - utils.txnEmail(FLAG_REPORT_EMAILS, 'flag-report-to-mods', [ - {name: "MESSAGE_TIME", content: (new Date(message.timestamp)).toString()}, - {name: "MESSAGE_TEXT", content: message.text}, - - {name: "REPORTER_USERNAME", content: user.profile.name}, - {name: "REPORTER_UUID", content: user._id}, - {name: "REPORTER_EMAIL", content: user.auth.local ? user.auth.local.email : ((user.auth.facebook && user.auth.facebook.emails && user.auth.facebook.emails[0]) ? user.auth.facebook.emails[0].value : null)}, - {name: "REPORTER_MODAL_URL", content: "/static/front/#?memberId=" + user._id}, - - {name: "AUTHOR_USERNAME", content: message.user}, - {name: "AUTHOR_UUID", content: message.uuid}, - {name: "AUTHOR_EMAIL", content: author.auth.local ? author.auth.local.email : ((author.auth.facebook && author.auth.facebook.emails && author.auth.facebook.emails[0]) ? author.auth.facebook.emails[0].value : null)}, - {name: "AUTHOR_MODAL_URL", content: "/static/front/#?memberId=" + message.uuid}, - - {name: "GROUP_NAME", content: group.name}, - {name: "GROUP_TYPE", content: group.type}, - {name: "GROUP_ID", content: group._id}, - {name: "GROUP_URL", content: group._id == TAVERN_ID ? '/#/options/groups/tavern' : (group.type === 'guild' ? ('/#/options/groups/guilds/' + group._id) : 'party')}, - ]); - - return res.sendStatus(204); - }); - }); -} - -api.clearFlagCount = function(req, res, next){ - var user = res.locals.user - var group = res.locals.group; - var message = _.find(group.chat, {id: req.params.mid}); - - if(!message) return res.status(404).json({err: shared.i18n.t('messageGroupChatNotFound')}); - - if(user.contributor.admin){ - message.flagCount = 0; - - Group.update({_id: group._id, 'chat.id': message.id}, {'$set': { - 'chat.$.flagCount': message.flagCount, - }}, function(err) { - if(err) return next(err); - return res.sendStatus(204); - }); - } else { - return res.status(401).json({err: shared.i18n.t('messageGroupChatAdminClearFlagCount')}) - } -} - -api.seenMessage = function(req,res,next){ - // Skip the auth step, we want this to be fast. If !found with uuid/token, then it just doesn't save - // Check for req.params.gid to exist - if(req.params.gid){ - var update = {$unset:{}}; - update['$unset']['newMessages.'+req.params.gid] = ''; - User.update({_id:req.headers['x-api-user'], apiToken:req.headers['x-api-key']},update).exec(); - } - res.sendStatus(200); -} - -api.likeChatMessage = function(req, res, next) { - var user = res.locals.user; - var group = res.locals.group; - var message = _.find(group.chat, {id: req.params.mid}); - - if (!message) return res.status(404).json({err: shared.i18n.t('messageGroupChatNotFound')}); - if (message.uuid == user._id) return res.status(401).json({err: shared.i18n.t('messageGroupChatLikeOwnMessage')}); - if (!message.likes) message.likes = {}; - if (message.likes[user._id]) { - delete message.likes[user._id]; - } else { - message.likes[user._id] = true; - } - - Group.update({_id: group._id, 'chat.id': message.id}, {'$set': { - 'chat.$.likes': message.likes - }}, function(err) { - if (err) return next(err); - return res.send(group.chat); - }); -} - -api.join = function(req, res, next) { - var user = res.locals.user, - group = res.locals.group, - isUserInvited = false; - - if (group.type == 'party' && group._id == (user.invitations && user.invitations.party && user.invitations.party.id)) { - User.update({_id:user.invitations.party.inviter}, {$inc:{'items.quests.basilist':1}}).exec(); // Reward inviter - user.invitations.party = {}; // Clear invite - user.markModified('invitations.party'); - user.party._id = group._id; - user.save(); - // invite new user to pending quest - if (group.quest.key && !group.quest.active) { - User.update({_id:user._id},{$set: {'party.quest.RSVPNeeded': true, 'party.quest.key': group.quest.key}}).exec(); - group.quest.members[user._id] = undefined; - group.markModified('quest.members'); - } - isUserInvited = true; - } else if (group.type == 'guild') { - var i = _.findIndex(user.invitations.guilds, {id:group._id}); - if (~i){ - isUserInvited = true; - user.invitations.guilds.splice(i,1); - user.guilds.push(group._id); - user.save(); - }else{ - isUserInvited = group.privacy === 'private' ? false : true; - if (isUserInvited) { - user.guilds.push(group._id); - user.save(); - } - } - } - - if(!isUserInvited) return res.status(401).json({err: shared.i18n.t('messageGroupRequiresInvite')}); - - if (group.memberCount === 0) { - group.leader = user._id; - } - - /*if (!_.contains(group.members, user._id)){ - if (group.members.length === 0) { - group.leader = user._id; - } - - group.members.push(user._id); - - if (group.invites.length > 0) { - group.invites.splice(_.indexOf(group.invites, user._id), 1); - } - }*/ - - async.series([ - function(cb){ - group.save(cb); - }, - function(cb){ - group.getTransformedData({ - cb, - populateMembers: group.type === 'party' ? partyFields : nameFields, - populateInvites: nameFields, - populateChallenges: challengeFields, - }) - } - ], function(err, results){ - if (err) return next(err); - // Return the group? Or not? - res.json(results[1]); - group = null; - }); -} - -api.leave = function(req, res, next) { - var user = res.locals.user; - var group = res.locals.group; - - if (group.type === 'party') { - if (group.quest && group.quest.leader === user._id) { - return res.json(403, 'You cannot leave your party when you have started a quest. Abort the quest first.'); - } - - if (group.quest && group.quest.active && group.quest.members && group.quest.members[user._id]) { - return res.json(403, 'You cannot leave party during an active quest. Please leave the quest first.'); - } - } - - // When removing the user from challenges, should we keep the tasks? - var keep = (/^remove-all/i).test(req.query.keep) ? 'remove-all' : 'keep-all'; - - group.leave(user, keep) - .then(() => res.sendStatus(204)) - .catch(next); -}; - -var inviteByUUIDs = function(uuids, group, req, res, next){ - async.each(uuids, function(uuid, cb){ - User.findById(uuid, function(err,invite){ - if (err) return cb(err); - if (!invite) - return cb({code:400,err:'User with id "' + uuid + '" not found'}); - if (group.type == 'guild') { - if (_.contains(invite.guilds, group._id)) - return cb({code:400, err: "User already in that group"}); - if (invite.invitations && invite.invitations.guilds && _.find(invite.invitations.guilds, {id:group._id})) - return cb({code:400, err:"User already invited to that group"}); - sendInvite(); - } else if (group.type == 'party') { - if (invite.invitations && !_.isEmpty(invite.invitations.party)) - return cb({code: 400,err:"User already pending invitation."}); - if (invite.party && invite.party._id) { - return cb({code: 400, err: "User already in a party."}) - } - sendInvite(); - } - - function sendInvite (){ - if(group.type === 'guild'){ - invite.invitations.guilds.push({id: group._id, name: group.name, inviter:res.locals.user._id}); - - pushNotify.sendNotify(invite, shared.i18n.t('invitedGuild'), group.name); - }else{ - //req.body.type in 'guild', 'party' - invite.invitations.party = {id: group._id, name: group.name, inviter:res.locals.user._id}; - - pushNotify.sendNotify(invite, shared.i18n.t('invitedParty'), group.name); - } - - //group.invites.push(invite._id); - - async.series([ - function(cb){ - invite.save(cb); - } - ], function(err, results){ - if (err) return cb(err); - - if(invite.preferences.emailNotifications['invited' + (group.type == 'guild' ? 'Guild' : 'Party')] !== false){ - var inviterVars = utils.getUserInfo(res.locals.user, ['name', 'email']); - var emailVars = [ - {name: 'INVITER', content: inviterVars.name} - ]; - - if(group.type == 'guild'){ - emailVars.push( - {name: 'GUILD_NAME', content: group.name}, - {name: 'GUILD_URL', content: '/#/options/groups/guilds/public'} - ); - }else{ - emailVars.push( - {name: 'PARTY_NAME', content: group.name}, - {name: 'PARTY_URL', content: '/#/options/groups/party'} - ) - } - - utils.txnEmail(invite, ('invited-' + (group.type == 'guild' ? 'guild' : 'party')), emailVars); - } - - cb(); - }); - } - }); - }, function(err){ - if(err) return err.code ? res.status(err.code).json({err: err.err}) : next(err); - - async.series([ - function(cb) { - group.save(cb); - }, - function(cb) { - // TODO pass group from save above don't find it again, or you have to find it again in order to run populate? - Group.findById(group._id).populate('leader', nameFields).exec(function (err, savedGroup) { - if (err) return next(err); - savedGroup.getTransformedData({ - cb: function (err, transformedGroup) { - if (err) return next(err); - res.json(transformedGroup); - }, - populateMembers: savedGroup.type === 'party' ? partyFields : nameFields, - populateInvites: nameFields, - populateChallenges: challengeFields, - }) - }); - } - ]); - }); -}; - -var inviteByEmails = function(invites, group, req, res, next){ - var usersAlreadyRegistered = []; - - async.each(invites, function(invite, cb){ - if (invite.email) { - User.findOne({$or: [ - {'auth.local.email': invite.email}, - {'auth.facebook.emails.value': invite.email} - ]}).select({_id: true, 'preferences.emailNotifications': true}) - .exec(function(err, userToContact){ - if(err) return next(err); - - if(userToContact){ - usersAlreadyRegistered.push(userToContact._id); - return cb(); - } - - // yeah, it supports guild too but for backward compatibility we'll use partyInvite as query - - var link = '?partyInvite='+ utils.encrypt(JSON.stringify({id:group._id, inviter:res.locals.user._id, name:group.name})); - - var inviterVars = utils.getUserInfo(res.locals.user, ['name', 'email']); - var variables = [ - {name: 'LINK', content: link}, - {name: 'INVITER', content: req.body.inviter || inviterVars.name} - ]; - - if(group.type == 'guild'){ - variables.push({name: 'GUILD_NAME', content: group.name}); - } - - // TODO implement "users can only be invited once" - // Check for the email address not to be unsubscribed - EmailUnsubscription.findOne({email: invite.email}, function(err, unsubscribed){ - if(err) return cb(err); - if(unsubscribed) return cb(); - - utils.txnEmail(invite, ('invite-friend' + (group.type == 'guild' ? '-guild' : '')), variables); - - cb(); - }); - }); - }else{ - cb(); - } - }, function(err){ - if(err) return err.code ? res.status(err.code).json({err: err.err}) : next(err); - - if (usersAlreadyRegistered.length > 0){ - inviteByUUIDs(usersAlreadyRegistered, group, req, res, next); - } else{ - - // Send only status code down the line because it doesn't need - // info on invited users since they are not yet registered - res.status(200).json({}); - } - }); -}; - -api.invite = function(req, res, next){ - var group = res.locals.group; - let userParty = res.locals.user.party && res.locals.user.party._id; - let userGuilds = res.locals.user.guilds; - - if (group.type === 'party' && userParty !== group._id) { - return res.status(401).json({err: "Only a member can invite new members!"}); - } - - if (group.type === 'guild' && group.privacy === 'private' && !_.contains(userGuilds, group._id)) { - return res.status(401).json({err: "Only a member can invite new members!"}); - } - - if (req.body.uuids) { - inviteByUUIDs(req.body.uuids, group, req, res, next); - } else if (req.body.emails) { - inviteByEmails(req.body.emails, group, req, res, next) - } else { - return res.status(400).json({err: "Can only invite by email or uuid"}); - } -} - -api.removeMember = function(req, res, next){ - var group = res.locals.group; - var uuid = req.query.uuid; - var message = req.query.message; - var user = res.locals.user; - - // Send an email to the removed user with an optional message from the leader - var sendMessage = function(removedUser){ - if(removedUser.preferences.emailNotifications.kickedGroup !== false){ - utils.txnEmail(removedUser, ('kicked-from-' + group.type), [ - {name: 'GROUP_NAME', content: group.name}, - {name: 'MESSAGE', content: message}, - {name: 'GUILDS_LINK', content: '/#/options/groups/guilds/public'}, - {name: 'PARTY_WANTED_GUILD', content: '/#/options/groups/guilds/f2db2a7f-13c5-454d-b3ee-ea1f5089e601'} - ]); - } - } - - if(group.leader !== user._id){ - return res.status(401).json({err: "Only group leader can remove a member!"}); - } - - if(user._id === uuid){ - return res.status(401).json({err: "You cannot remove yourself!"}); - } - - User.findById(uuid, function(err, removedUser){ - if (err) return next(err); - let isMember = group._id === removedUser.party._id || _.contains(removedUser.guilds, group._id); - let isInvited = group._id === removedUser.invitations.party._id || !!_.find(removedUser.invitations.guilds, {id: group._id}); - - if(isMember){ - var update = {}; - if (group.quest && group.quest.leader === uuid) { - update['$set'] = { - quest: { key: null, leader: null } - }; - } else if(group.quest && group.quest.members){ - // remove member from quest - update['$unset'] = {}; - update['$unset']['quest.members.' + uuid] = ""; - } - update['$inc'] = {memberCount: -1}; - Group.update({_id:group._id},update, function(err, saved){ - if (err) return next(err); - - sendMessage(removedUser); - - //Mark removed users messages as seen - var update = {$unset:{}}; - if (group.type === 'guild') { - update.$pull = {guilds: group._id}; - } else { - update.$unset.party = true; - } - update.$unset['newMessages.' + group._id] = ''; - if (group.quest && group.quest.active && group.quest.leader === uuid) { - update['$inc'] = {}; - update['$inc']['items.quests.' + group.quest.key] = 1; - } - User.update({_id: removedUser._id, apiToken: removedUser.apiToken}, update).exec(); - - // Sending an empty 204 because Group.update doesn't return the group - // see http://mongoosejs.com/docs/api.html#model_Model.update - group = uuid = null; - return res.sendStatus(204); - }); - }else if(isInvited){ - var invitations = removedUser.invitations; - if(group.type === 'guild'){ - invitations.guilds.splice(_.indexOf(invitations.guilds, group._id), 1); - }else{ - invitations.party = undefined; - } - - async.series([ - function(cb){ - removedUser.save(cb); - }, - ], function(err, results){ - if (err) return next(err); - - // Sending an empty 204 because Group.update doesn't return the group - // see http://mongoosejs.com/docs/api.html#model_Model.update - sendMessage(removedUser); - group = uuid = null; - return res.sendStatus(204); - }); - }else{ - group = uuid = null; - return res.status(400).json({err: "User not found among group's members!"}); - } - }); -} - -// ------------------------------------ -// Quests -// ------------------------------------ -function canStartQuestAutomatically (group) { - // If all members are either true (accepted) or false (rejected) return true - // If any member is null/undefined (undecided) return false - return _.every(group.quest.members, _.isBoolean); -} - -function questStart(req, res, next) { - var group = res.locals.group; - var force = req.query.force; - - // if (group.quest.active) return res.status(400).json({err:'Quest already began.'}); - // temporarily send error email, until we know more about this issue (then remove below, uncomment above). - if (group.quest.active) return next('Quest already began.'); - - group.markModified('quest'); - - // Not ready yet, wait till everyone's accepted, rejected, or we force-start - var statuses = _.values(group.quest.members); - if (!force && (~statuses.indexOf(undefined) || ~statuses.indexOf(null))) { - return group.save(function(err,saved){ - if (err) return next(err); - res.json(saved); - }) - } - - var parallel = [], - questMembers = {}, - key = group.quest.key, - quest = shared.content.quests[key], - collected = quest.collect ? _.transform(quest.collect, function(m,v,k){m[k]=0}) : {}; - - _.each(group.members, function(m){ - var updates = {$set:{},$inc:{'_v':1}}; - if (m == group.quest.leader) - updates['$inc']['items.quests.'+key] = -1; - if (group.quest.members[m] == true) { - // See https://github.com/HabitRPG/habitrpg/issues/2168#issuecomment-31556322 , we need to *not* reset party.quest.progress.up - //updates['$set']['party.quest'] = Group.cleanQuestProgress({key:key,progress:{collect:collected}}); - updates['$set']['party.quest.key'] = key; - updates['$set']['party.quest.progress.down'] = 0; - updates['$set']['party.quest.progress.collect'] = collected; - updates['$set']['party.quest.completed'] = null; - questMembers[m] = true; - - User.findOne({_id: m}, {pushDevices: 1}, function(err, user){ - pushNotify.sendNotify(user, "HabitRPG", shared.i18n.t('questStarted') + ": "+ quest.text() ); - }); - } else { - updates['$set']['party.quest'] = Group.cleanQuestProgress(); - } - - parallel.push(function(cb2){ - User.update({_id:m},updates,cb2); - }); - }); - - group.quest.active = true; - if (quest.boss) { - group.quest.progress.hp = quest.boss.hp; - if (quest.boss.rage) group.quest.progress.rage = 0; - } else { - group.quest.progress.collect = collected; - } - group.quest.members = questMembers; - group.markModified('quest'); // members & progress.collect are both Mixed types - parallel.push(function(cb2){group.save(cb2)}); - - parallel.push(function(cb){ - // Fetch user.auth to send email, then remove it from data sent to the client - populateQuery(group.type, Group.findById(group._id), 'auth.facebook auth.local').exec(cb); - }); - - async.parallel(parallel,function(err, results){ - if (err) return next(err); - - var lastIndex = results.length -1; - var groupClone = clone(group); - - groupClone.members = results[lastIndex].members; - - // Send quest started email - var usersToEmail = groupClone.members.filter(function(user){ - return ( - user.preferences.emailNotifications.questStarted !== false && - user._id !== res.locals.user._id && - group.quest.members[user._id] == true - ) - }); - - utils.txnEmail(usersToEmail, 'quest-started', [ - {name: 'PARTY_URL', content: '/#/options/groups/party'} - ]); - - _.each(groupClone.members, function(user){ - // Remove sensitive data from what is sent to the public - // but after having sent emails as they are needed - user.auth.facebook = undefined; - user.auth.local = undefined; - }); - - group = null; - - return res.json(groupClone); - }); -} - -api.questAccept = function(req, res, next) { - var group = res.locals.group; - var user = res.locals.user; - var key = req.query.key; - - if (!group || group.type !== 'party') return res.status(400).json({err: "Must be in a party to start quests."}); - - // If ?key=xxx is provided, we're starting a new quest and inviting the party. Otherwise, we're a party member accepting the invitation - if (key) { - var quest = shared.content.quests[key]; - if (!quest) return res.status(404).json({err:'Quest ' + key + ' not found'}); - if (quest.lvl && user.stats.lvl < quest.lvl) return res.status(400).json({err: "You must be level "+quest.lvl+" to begin this quest."}); - if (group.quest.key) return res.status(400).json({err: 'Your party is already on a quest. Try again when the current quest has ended.'}); - if (!user.items.quests[key]) return res.status(400).json({err: "You don't own that quest scroll"}); - - let members; - - User.find({ - 'party._id': group._id, - _id: {$ne: user._id}, - }).select('auth.facebook auth.local preferences.emailNotifications profile.name pushDevices') - .exec().then(membersF => { - members = membersF; - - group.markModified('quest'); - group.quest.key = key; - group.quest.leader = user._id; - group.quest.members = {}; - group.quest.members[user._id] = true; - - user.party.quest.RSVPNeeded = false; - user.party.quest.key = key; - - return User.update({ - 'party._id': group._id, - _id: {$ne: user._id}, - }, { - $set: { - 'party.quest.RSVPNeeded': true, - 'party.quest.key': key, - }, - }, {multi: true}).exec(); - }).then(() => { - _.each(members, (member) => { - group.quest.members[member._id] = null; - }); - - if (canStartQuestAutomatically(group)) { - group.startQuest(user).then(() => { - return Bluebird.all([group.save(), user.save()]) - }) - .then(results => { - results[0].getTransformedData({ - cb (err, groupTransformed) { - if (err) return next(err); - res.json(groupTransformed); - }, - populateMembers: group.type === 'party' ? partyFields : nameFields, - }); - }) - .catch(next); - - } else { - Bluebird.all([group.save(), user.save()]) - .then(results => { - results[0].getTransformedData({ - cb (err, groupTransformed) { - if (err) return next(err); - res.json(groupTransformed); - }, - populateMembers: group.type === 'party' ? partyFields : nameFields, - }); - }) - .catch(next); - } - }).catch(next); - - // Party member accepting the invitation - } else { - group.markModified('quest'); - group.quest.members[user._id] = true; - user.party.quest.RSVPNeeded = false; - - if (canStartQuestAutomatically(group)) { - group.startQuest(user).then(() => { - return Bluebird.all([group.save(), user.save()]) - }) - .then(results => { - results[0].getTransformedData({ - cb (err, groupTransformed) { - if (err) return next(err); - res.json(groupTransformed); - }, - populateMembers: group.type === 'party' ? partyFields : nameFields, - }); - }) - .catch(next); - - } else { - Bluebird.all([group.save(), user.save()]) - .then(results => { - results[0].getTransformedData({ - cb (err, groupTransformed) { - if (err) return next(err); - res.json(groupTransformed); - }, - populateMembers: group.type === 'party' ? partyFields : nameFields, - }); - }) - .catch(next); - } - } -} - -api.questReject = function(req, res, next) { - var group = res.locals.group; - var user = res.locals.user; - - group.quest.members[user._id] = false; - group.markModified('quest.members'); - - user.party.quest = Group.cleanQuestProgress(); - user.markModified('party.quest'); - - if (canStartQuestAutomatically(group)) { - group.startQuest(user).then(() => { - return Bluebird.all([group.save(), user.save()]) - }) - .then(results => { - results[0].getTransformedData({ - cb (err, groupTransformed) { - if (err) return next(err); - res.json(groupTransformed); - }, - populateMembers: group.type === 'party' ? partyFields : nameFields, - }); - }) - .catch(next); - - } else { - Bluebird.all([group.save(), user.save()]) - .then(results => { - results[0].getTransformedData({ - cb (err, groupTransformed) { - if (err) return next(err); - res.json(groupTransformed); - }, - populateMembers: group.type === 'party' ? partyFields : nameFields, - }); - }) - .catch(next); - } -} - -api.questCancel = function(req, res, next){ - var group = res.locals.group; - - group.quest = Group.cleanGroupQuest(); - group.markModified('quest'); - - Bluebird.all([ - group.save(), - User.update( - {'party._id': group._id}, - {$set: {'party.quest': Group.cleanQuestProgress()}}, - {multi: true} - ), - ]).then(results => { - results[0].getTransformedData({ - cb (err, groupTransformed) { - if (err) return next(err); - res.json(groupTransformed); - }, - populateMembers: group.type === 'party' ? partyFields : nameFields, - }); - }).catch(next); - - // Cancel a quest BEFORE it has begun (i.e., in the invitation stage) - // Quest scroll has not yet left quest owner's inventory so no need to return it. - // Do not wipe quest progress for members because they'll want it to be applied to the next quest that's started. -} - -api.questAbort = function(req, res, next){ - var group = res.locals.group; - - let memberUpdates = User.update({ - 'party._id': group._id, - }, { - $set: {'party.quest': Group.cleanQuestProgress()}, - $inc: {_v: 1}, // TODO update middleware - }, {multi: true}).exec(); - - let questLeaderUpdate = User.update({ - _id: group.quest.leader, - }, { - $inc: { - [`items.quests.${group.quest.key}`]: 1, // give back the quest to the quest leader - }, - }).exec(); - - group.quest = Group.cleanGroupQuest(); - group.markModified('quest'); - - Bluebird.all([group.save(), memberUpdates, questLeaderUpdate]) - .then(results => { - results[0].getTransformedData({ - cb (err, groupTransformed) { - if (err) return next(err); - res.json(groupTransformed); - }, - populateMembers: group.type === 'party' ? partyFields : nameFields, - }); - }) - .catch(next); -} - -api.questLeave = function(req, res, next) { - // Non-member leave quest while still in progress - var group = res.locals.group; - var user = res.locals.user; - - if (!(group.quest && group.quest.active)) { - return res.status(404).json({ err: 'No active quest to leave' }); - } - - if (!(group.quest.members && group.quest.members[user._id])) { - return res.status(403).json({ err: 'You are not part of the quest' }); - } - - if (group.quest.leader === user._id) { - return res.status(403).json({ err: 'Quest leader cannot leave quest' }); - } - - group.quest.members[user._id] = false; - group.markModified('quest.members'); - - user.party.quest = Group.cleanQuestProgress(); - user.markModified('party.quest'); - - var groupSavePromise = Bluebird.promisify(group.save, {context: group}); - var userSavePromise = Bluebird.promisify(user.save, {context: user}); - - Bluebird.all([groupSavePromise(), userSavePromise()]) - .done(function(values) { - return res.sendStatus(204); - }, function(error) { - return next(error); - }); -} - -function _purgeFlagInfoFromChat(group, user) { - group.chat = _.filter(group.chat, function(message) { return !message.flagCount || message.flagCount < 2; }); - _.each(group.chat, function (message) { - if (message.flags) { - var userHasFlagged = message.flags[user._id]; - message.flags = {}; - - if (userHasFlagged) message.flags[user._id] = userHasFlagged; - } - }); -} diff --git a/website/server/controllers/api-v2/hall.js b/website/server/controllers/api-v2/hall.js deleted file mode 100644 index 05d3bf520c..0000000000 --- a/website/server/controllers/api-v2/hall.js +++ /dev/null @@ -1,89 +0,0 @@ -var _ = require('lodash'); -var nconf = require('nconf'); -var async = require('async'); -var shared = require('../../../../common'); -import { - model as User, -} from '../../models/user'; -import { - model as Group, -} from '../../models/group'; -var api = module.exports; - -api.ensureAdmin = function(req, res, next) { - var user = res.locals.user; - if (!(user.contributor && user.contributor.admin)) return res.status(401).json({err:"You don't have admin access"}); - next(); -} - -api.getHeroes = function(req,res,next) { - User.find({'contributor.level':{$gt:0}}) - .select('contributor backer balance profile.name') - .sort('-contributor.level') - .exec(function(err, users){ - if (err) return next(err); - res.json(users); - }); -} - -api.getPatrons = function(req,res,next){ - var page = req.query.page || 0, - perPage = 50; - User.find({'backer.tier':{$gt:0}}) - .select('contributor backer profile.name') - .sort('-backer.tier') - .skip(page*perPage) - .limit(perPage) - .exec(function(err, users){ - if (err) return next(err); - res.json(users); - }); -} - -api.getHero = function(req,res,next) { - User.findById(req.params.uid) - .select('contributor balance profile.name purchased items') - .select('auth.local.username auth.local.email auth.facebook auth.blocked') - .exec(function(err, user){ - if (err) return next(err) - if (!user) return res.status(400).json({err:'User not found'}); - res.json(user); - }); -} - -api.updateHero = function(req,res,next) { - async.waterfall([ - function(cb){ - User.findById(req.params.uid, cb); - }, - function(member, cb){ - if (!member) return res.status(404).json({err: "User not found"}); - member.balance = req.body.balance || 0; - var newTier = req.body.contributor.level; // tier = level in this context - var oldTier = member.contributor && member.contributor.level || 0; - if (newTier > oldTier) { - member.flags.contributor = true; - var gemsPerTier = {1:3, 2:3, 3:3, 4:4, 5:4, 6:4, 7:4, 8:0, 9:0}; // e.g., tier 5 gives 4 gems. Tier 8 = moderator. Tier 9 = staff - var tierDiff = newTier - oldTier; // can be 2+ tier increases at once - while (tierDiff) { - member.balance += gemsPerTier[newTier] / 4; // balance is in $ - tierDiff--; - newTier--; // give them gems for the next tier down if they weren't aready that tier - } - } - member.contributor = req.body.contributor; - member.purchased.ads = req.body.purchased.ads; - if (member.contributor.level >= 6) member.items.pets['Dragon-Hydra'] = 5; - if (req.body.itemPath && req.body.itemVal - && req.body.itemPath.indexOf('items.') === 0 - && User.schema.paths[req.body.itemPath]) { - shared.dotSet(member, req.body.itemPath, req.body.itemVal); // Sanitization at 5c30944 (deemed unnecessary) - } - if (_.isBoolean(req.body.auth.blocked)) member.auth.blocked = req.body.auth.blocked; - member.save(cb); - } - ], function(err, saved){ - if (err) return next(err); - res.status(204).json({}); - }) -} diff --git a/website/server/controllers/api-v2/members.js b/website/server/controllers/api-v2/members.js deleted file mode 100644 index 232bb9ed73..0000000000 --- a/website/server/controllers/api-v2/members.js +++ /dev/null @@ -1,139 +0,0 @@ -import { - model as groups, - chatDefaults, -} from '../../models/group'; -import { - model as User, -} from '../../models/user'; -let partyFields = require('./groups').partyFields; -var api = module.exports; -var async = require('async'); -var _ = require('lodash'); -var shared = require('../../../../common'); -var utils = require('../../libs/api-v2/utils'); -var nconf = require('nconf'); -var pushNotify = require('./pushNotifications'); - -var fetchMember = function(uuid, restrict){ - return function(cb){ - var q = User.findById(uuid); - if (restrict) q.select(partyFields); - q.exec(function(err, member){ - if (err) return cb(err); - if (!member) return cb({code:404, err: 'User not found'}); - return cb(null, member); - }) - } -} - -var sendErr = function(err, res, next){ - err.code ? res.status(err.code).json({err: err.err}) : next(err); -} - -api.getMember = function(req, res, next) { - fetchMember(req.params.uuid, true)(function(err, member){ - if (err) return sendErr(err, res, next); - res.json(member); - }) -} - -api.sendMessage = function(user, member, data){ - var msg; - if (!data.type) { - msg = data.message - } else { - msg = "`Hello " + member.profile.name + ", " + user.profile.name + " has sent you "; - if (data.type == 'gems') { - var gemAmount = data.gems.amount; - var gemLabel = gemAmount > 1 ? "gems" : "gem"; - msg += gemAmount + " " + gemLabel + "!`"; - } else { - var monthAmount = shared.content.subscriptionBlocks[data.subscription.key].months; - var monthLabel = monthAmount > 1 ? "months" : "month"; - msg += monthAmount + " " + monthLabel + " of subscription!`"; - } - msg += data.message ? data.message : ''; - } - shared.refPush(member.inbox.messages, chatDefaults(msg, user)); - member.inbox.newMessages++; - member._v++; - member.markModified('inbox.messages'); - - shared.refPush(user.inbox.messages, _.defaults({sent:true}, chatDefaults(msg, member))); - user.markModified('inbox.messages'); -} - -api.sendPrivateMessage = function(req, res, next){ - var fetchedMember; - async.waterfall([ - fetchMember(req.params.uuid), - function(member, cb) { - fetchedMember = member; - if (~member.inbox.blocks.indexOf(res.locals.user._id) // can't send message if that user blocked me - || ~res.locals.user.inbox.blocks.indexOf(member._id) // or if I blocked them - || member.inbox.optOut) { // or if they've opted out of messaging - return cb({code: 401, err: "Can't send message to this user."}); - } - api.sendMessage(res.locals.user, member, {message:req.body.message}); - async.parallel([ - function (cb2) { member.save(cb2) }, - function (cb2) { res.locals.user.save(cb2) } - ], cb); - } - ], function(err){ - if (err) return sendErr(err, res, next); - - if(fetchedMember.preferences.emailNotifications.newPM !== false){ - utils.txnEmail(fetchedMember, 'new-pm', [ - {name: 'SENDER', content: utils.getUserInfo(res.locals.user, ['name']).name}, - {name: 'PMS_INBOX_URL', content: '/#/options/groups/inbox'} - ]); - } - - res.sendStatus(200); - }) -} - -api.sendGift = function(req, res, next){ - async.waterfall([ - fetchMember(req.params.uuid), - function(member, cb) { - // Gems - switch (req.body.type) { - case "gems": - var amt = req.body.gems.amount / 4, - user = res.locals.user; - if (member.id == user.id) - return cb({code: 401, err: "Cannot send gems to yourself. Try a subscription instead."}); - if (!amt || amt <=0 || user.balance < amt) - return cb({code: 401, err: "Amount must be within 0 and your current number of gems."}); - member.balance += amt; - user.balance -= amt; - api.sendMessage(user, member, req.body); - - var byUsername = utils.getUserInfo(user, ['name']).name; - - if(member.preferences.emailNotifications.giftedGems !== false){ - utils.txnEmail(member, 'gifted-gems', [ - {name: 'GIFTER', content: byUsername}, - {name: 'X_GEMS_GIFTED', content: req.body.gems.amount} - ]); - } - - pushNotify.sendNotify(member, shared.i18n.t('giftedGems'), shared.i18n.t('giftedGemsInfo', { amount: req.body.gems.amount, name: byUsername })); - - return async.parallel([ - function (cb2) { member.save(cb2) }, - function (cb2) { user.save(cb2) } - ], cb); - case "subscription": - return cb(); - default: - return cb({code:400, err:"Body must contain a gems:{amount,fromBalance} or subscription:{months} object"}); - } - } - ], function(err) { - if (err) return sendErr(err, res, next); - res.sendStatus(200); - }); -} diff --git a/website/server/controllers/api-v2/pushNotifications.js b/website/server/controllers/api-v2/pushNotifications.js deleted file mode 100644 index 6b73816c94..0000000000 --- a/website/server/controllers/api-v2/pushNotifications.js +++ /dev/null @@ -1,6 +0,0 @@ -// TODO move to /api-v2 -var api = module.exports; - -api.sendNotify = function(user, title, msg, timeToLive){ - // Disabled, see libs/api-v3/pushNotifications -}; diff --git a/website/server/controllers/api-v2/unsubscription.js b/website/server/controllers/api-v2/unsubscription.js deleted file mode 100644 index a91db19d86..0000000000 --- a/website/server/controllers/api-v2/unsubscription.js +++ /dev/null @@ -1,40 +0,0 @@ -import { - model as User, -} from '../../models/user'; -import { - model as EmailUnsubscription, -} from '../../models/emailUnsubscription'; -var utils = require('../../libs/api-v2/utils'); -var i18n = require('../../../../common').i18n; - -var api = module.exports = {}; - -api.unsubscribe = function(req, res, next){ - if(!req.query.code) return res.status(500).json({err: 'Missing unsubscription code.'}); - - var data = JSON.parse(utils.decrypt(req.query.code)); - - if(data._id){ - User.update({_id: data._id}, { - $set: {'preferences.emailNotifications.unsubscribeFromAll': true} - }, {multi: false}, function(err, updateRes){ - if(err) return next(err); - if(updateRes.n !== 1) return res.json(404, {err: 'User not found'}); - - res.send('

' + i18n.t('unsubscribedSuccessfully', null, req.language) + '

' + i18n.t('unsubscribedTextUsers', null, req.language)); - }); - }else{ - EmailUnsubscription.findOne({email: data.email}, function(err, doc){ - if(err) return next(err); - var okRes = '

' + i18n.t('unsubscribedSuccessfully', null, req.language) + '

' + i18n.t('unsubscribedTextOthers', null, req.language); - - if(doc) return res.send(okRes); - - EmailUnsubscription.create({email: data.email}, function(err, doc){ - if(err) return next(err); - - res.send(okRes); - }) - }); - } -}; diff --git a/website/server/controllers/api-v2/user.js b/website/server/controllers/api-v2/user.js deleted file mode 100644 index 3812accfb6..0000000000 --- a/website/server/controllers/api-v2/user.js +++ /dev/null @@ -1,1066 +0,0 @@ -var url = require('url'); -var ipn = require('paypal-ipn'); -var _ = require('lodash'); -var validator = require('validator'); -var nconf = require('nconf'); -var asyncM = require('async'); -var shared = require('../../../../common'); -import { - model as User, -} from '../../models/user'; -import { - NotFound, -} from '../../libs/api-v3/errors'; -import { model as Tag } from '../../models/tag'; -import * as Tasks from '../../models/task'; -import Bluebird from 'bluebird'; -import {removeFromArray} from './../../libs/api-v3/collectionManipulators'; -var utils = require('./../../libs/api-v2/utils'); -var analytics = utils.analytics; -import { - basicFields as basicGroupFields, - model as Group, -} from '../../models/group'; -import { - model as Challenge, -} from '../../models/challenge'; -var moment = require('moment'); -var logging = require('./../../libs/api-v2/logging'); -var acceptablePUTPaths; -let restrictedPUTSubPaths; -import v3UserController from '../api-v3/user'; - -let i18n = shared.i18n; - -var api = module.exports; -var webhook = require('../../libs/api-v2/webhook'); - -const partyMembersFields = 'profile.name stats achievements items.special'; - -// api.purchase // Shared.ops - -api.getContent = function(req, res, next) { - var language = 'en'; - - if (typeof req.query.language != 'undefined') - language = req.query.language.toString(); //|| 'en' in i18n - - var content = _.cloneDeep(shared.content); - var walk = function(obj, lang){ - _.each(obj, function(item, key, source){ - if (_.isPlainObject(item) || _.isArray(item)) return walk(item, lang); - if (_.isFunction(item) && item.i18nLangFunc) source[key] = item(lang); - }); - } - walk(content, language); - res.json(content); -} - -api.getModelPaths = function(req,res,next){ - res.json(_.reduce(User.schema.paths,function(m,v,k){ - m[k] = v.instance || 'Boolean'; - return m; - },{})); -} - -/* - ------------------------------------------------------------------------ - Tasks - ------------------------------------------------------------------------ -*/ - - -/* - Local Methods - --------------- -*/ - -var findTask = function(req, res) { - return res.locals.user.tasks[req.params.id]; -}; - -function findTaskByIdOrLegacyId (user, taskId, callback) { - asyncM.waterfall([ - function (cb) { - Tasks.Task.findOne({ - _id: taskId, - userId: user._id, - }, cb); - }, - function (task, cb) { - if (task) return cb(null, task); - - Tasks.Task.findOne({ - _legacyId: taskId, - userId: user._id, - }, cb); - }, - ], callback); -} - -/* - API Routes - --------------- -*/ - -api.score = function(req, res, next) { - var id = req.params.id, - direction = req.params.direction, - user = res.locals.user, - body = req.body || {}, - task; - - // Send error responses for improper API call - if (!id) return res.json(400, {err: ':id required'}); - if (direction !== 'up' && direction !== 'down') { - if (direction == 'unlink' || direction == 'sort') return next(); - return res.json(400, {err: ":direction must be 'up' or 'down'"}); - } - - findTaskByIdOrLegacyId(user, id, function (err, task) { - if (err) return next(err); - - // If exists already, score it - if (!task) { - // If it doesn't exist, this is likely a 3rd party up/down - create a new one, then score it - // Defaults. Other defaults are handled in user.ops.addTask() - var taskOptions = { - type: body.type || 'habit', - text: body.text || id, - userId: user._id, - notes: body.notes || "This task was created by a third-party service. Feel free to edit, it won't harm the connection to that service. Additionally, multiple services may piggy-back off this task." // TODO translate - } - - if (validator.isUUID(id)) { - taskOptions._id = id; // TODO this might easily lead to conflicts as ids are now unique db-wide - } else { - taskOptions._legacyId = id; - } - - task = new Tasks.Task(taskOptions); - - user.tasksOrder[task.type + 's'].unshift(task._id); - } - - // Set completed if type is daily or todo - if (task.type === 'daily' || task.type === 'todo') { - task.completed = direction === 'up'; - } - - var [delta] = shared.ops.scoreTask({ - user, - task, - direction, - }, req); - // Drop system (don't run on the client, as it would only be discarded since ops are sent to the API, not the results) - if (direction === 'up') user.fns.randomDrop({task, delta}, req); - - asyncM.parallel({ - task: task.save.bind(task), - user: user.save.bind(user) - }, function(err, results){ - if(err) return next(err); - - // TODO this is suuuper strange, sometimes results.user is an array, sometimes user directly - var saved = Array.isArray(results.user) ? results.user[0] : results.user; - var task = Array.isArray(results.task) ? results.task[0] : results.task; - - var userStats = saved.toJSON().stats; - var resJsonData = _.extend({ delta: delta, _tmp: user._tmp }, userStats); - res.json(200, resJsonData); - - var webhookData = _generateWebhookTaskData( - task, direction, delta, userStats, user - ); - webhook.sendTaskWebhook(user.preferences.webhooks, webhookData); - - if ( - (!task.challenge.id || task.challenge.broken) // If it's a challenge task, sync the score. Do it in the background, we've already sent down a response and the user doesn't care what happens back there - || (task.type == 'reward') // we don't want to update the reward GP cost - ) return; - - // select name and shortName because they can be synced on syncToUser - Challenge.findById(task.challenge.id, 'name shortName', function(err, chal) { - if (err) return next(err); - if (!chal) { - task.challenge.broken = 'CHALLENGE_DELETED'; - task.save(); - return; - } - - Tasks.Task.findOne({ - '_id': task.challenge.taskId, - userId: {$exists: false} - }, function(err, chalTask){ - if(err) return; //TODO - // this task was removed from the challenge, notify user - if(!chalTask) { - // TODO finish - chal.getTasks(function(err, chalTasks){ - if(err) return; //TODO - chal.syncToUser(user, chalTasks); - }); - } else { - chalTask.value += delta; - if (chalTask.type == 'habit' || chalTask.type == 'daily') - chalTask.history.push({value: chalTask.value, date: +new Date}); - chalTask.save(); - } - }); - }); - }); - }); -}; - -/** - * Get all tasks - */ -api.getTasks = function(req, res, next) { - var user = res.locals.user; - - user.getTasks(req.query.type, function (err, tasks) { - if (err) return next(err); - res.status(200).json(tasks.map(task => task.toJSONV2())); - }); -}; - -/** - * Get Task - */ -api.getTask = function(req, res, next) { - var user = res.locals.user, - id = req.params.id; - - findTaskByIdOrLegacyId(user, id, function (err, task) { - if (err) return next(err); - if (!task) return res.status(404).json({err: shared.i18n.t('messageTaskNotFound')}); - res.status(200).json(task.toJSONV2()); - }); -}; - -/* - ------------------------------------------------------------------------ - Items - ------------------------------------------------------------------------ -*/ -// api.buy // handled in Shard.ops - -api.getBuyList = function (req, res, next) { - var list = shared.updateStore(res.locals.user); - return res.status(200).json(list); -}; - -/* - ------------------------------------------------------------------------ - User - ------------------------------------------------------------------------ -*/ - -/** - * Get User - */ -api.getUser = function(req, res, next) { - res.locals.user.getTransformedData(function(err, user){ - user.stats.toNextLevel = shared.tnl(user.stats.lvl); - user.stats.maxHealth = shared.maxHealth; - user.stats.maxMP = res.locals.user._statsComputed.maxMP; - delete user.apiToken; - if (user.auth && user.auth.local) { - delete user.auth.local.hashed_password; - delete user.auth.local.salt; - } - return res.status(200).json(user); - }); -}; - -/** - * Get anonymized User - */ -api.getUserAnonymized = function(req, res, next) { - res.locals.user.getTransformedData(function(err, user){ - user.stats.toNextLevel = shared.tnl(user.stats.lvl); - user.stats.maxHealth = shared.maxHealth; - user.stats.maxMP = res.locals.user._statsComputed.maxMP; - - delete user.apiToken; - - if (user.auth) { - delete user.auth.local; - delete user.auth.facebook; - } - - delete user.newMessages; - - delete user.profile; - delete user.purchased.plan; - delete user.contributor; - delete user.invitations; - - delete user.items.special.nyeReceived; - delete user.items.special.valentineReceived; - - delete user.webhooks; - delete user.achievements.challenges; - - _.forEach(user.inbox.messages, function(msg){ - msg.text = "inbox message text"; - }); - - _.forEach(user.tags, function(tag){ - tag.name = "tag"; - tag.challenge = "challenge"; - }); - - function cleanChecklist(task){ - var checklistIndex = 0; - - _.forEach(task.checklist, function(c){ - c.text = "item" + checklistIndex++; - }); - } - - _.forEach(user.habits, function(task){ - task.text = "task text"; - task.notes = "task notes"; - }); - - _.forEach(user.rewards, function(task){ - task.text = "task text"; - task.notes = "task notes"; - }); - - _.forEach(user.dailys, function(task){ - task.text = "task text"; - task.notes = "task notes"; - - cleanChecklist(task); - }); - - _.forEach(user.todos, function(task){ - task.text = "task text"; - task.notes = "task notes"; - - cleanChecklist(task); - }); - - return res.status(200).json(user); - }); -}; - -/** - * This tells us for which paths users can call `PUT /user` (or batch-update equiv, which use `User.set()` on our client). - * The trick here is to only accept leaf paths, not root/intermediate paths (see http://goo.gl/OEzkAs) - * TODO - one-by-one we want to widdle down this list, instead replacing each needed set path with API operations - */ -acceptablePUTPaths = _.reduce(require('./../../models/user').schema.paths, (m, v, leaf) => { - let updatablePaths = 'achievements filters flags invitations lastCron party preferences profile stats inbox'.split(' '); - let found = _.find(updatablePaths, (rootPath) => { - return leaf.indexOf(rootPath) === 0; - }); - - if (found) m[leaf] = true; - - return m; -}, {}); - -restrictedPUTSubPaths = 'stats.class'.split(' '); - -_.each(restrictedPUTSubPaths, (removePath) => { - delete acceptablePUTPaths[removePath]; -}); - -let requiresPurchase = { - 'preferences.background': 'background', - 'preferences.shirt': 'shirt', - 'preferences.size': 'size', - 'preferences.skin': 'skin', - 'preferences.chair': 'chair', - 'preferences.hair.bangs': 'hair.bangs', - 'preferences.hair.base': 'hair.base', - 'preferences.hair.beard': 'hair.beard', - 'preferences.hair.color': 'hair.color', - 'preferences.hair.flower': 'hair.flower', - 'preferences.hair.mustache': 'hair.mustache', -}; - -let checkPreferencePurchase = (user, path, item) => { - let itemPath = `${path}.${item}`; - let appearance = _.get(shared.content.appearances, itemPath) - if (!appearance) return false; - if (appearance.price === 0) return true; - - return _.get(user.purchased, itemPath); -}; - -/** - * Update user - * Send up PUT /user as `req.body={path1:val, path2:val, etc}`. Example: - * PUT /user {'stats.hp':50, 'tasks.TASK_ID.repeat.m':false} - * See acceptablePUTPaths for which user paths are supported -*/ -api.update = (req, res, next) => { - let user = res.locals.user; - let errors = []; - - if (_.isEmpty(req.body)) return res.status(200).json(user); - - _.each(req.body, (v, k) => { - let purchasable = requiresPurchase[k]; - - if (purchasable && !checkPreferencePurchase(user, purchasable, v)) { - return errors.push(`Must purchase ${v} to set it on ${k}`); - } - - if (acceptablePUTPaths[k]) { - user.fns.dotSet(k, v); - } else { - errors.push(shared.i18n.t('messageUserOperationProtected', { operation: k })); - } - return true; - }); - - user.save((err) => { - if (!_.isEmpty(errors)) return res.status(401).json({err: errors}); - if (err) { - if (err.name == 'ValidationError') { - let errorMessages = _.map(_.values(err.errors), (error) => { - return error.message; - }); - return res.status(400).json({err: errorMessages}); - } - return next(err); - } - - res.status(200).json(user); - user = errors = null; - }); -}; - -api.cron = require('../../middlewares/api-v3/cron'); - -// api.reroll // Shared.ops -// api.reset // Shared.ops - -api.delete = function(req, res, next) { - var user = res.locals.user; - var plan = user.purchased.plan; - - if (plan && plan.customerId && !plan.dateTerminated){ - return res.status(400).json({err:"You have an active subscription, cancel your plan before deleting your account."}); - } - - let types = ['party', 'guilds']; - let groupFields = basicGroupFields.concat(' leader memberCount'); - - Group.getGroups({user, types, groupFields}) - .then(groups => { - return Bluebird.all(groups.map((group) => { - return group.leave(user, 'remove-all'); - })); - }) - .then(() => { - return Tasks.Task.remove({ - userId: user._id, - }).exec(); - }) - .then(() => { - return user.remove(); - }) - .then(() => { - res.sendStatus(200); - }) - .catch(next); -} - -/* - ------------------------------------------------------------------------ - Development Only Operations - ------------------------------------------------------------------------ - */ -if (nconf.get('NODE_ENV') === 'development') { - - api.addTenGems = function(req, res, next) { - var user = res.locals.user; - - user.balance += 2.5; - - user.save(function(err){ - if (err) return next(err); - res.sendStatus(204); - }); - }; - - api.addHourglass = function(req, res, next) { - var user = res.locals.user; - - user.purchased.plan.consecutive.trinkets += 1; - - user.save(function(err){ - if (err) return next(err); - res.sendStatus(204); - }); - }; -} - -/* - ------------------------------------------------------------------------ - Tags - ------------------------------------------------------------------------ - */ - -api.getTags = function (req, res, next) { - res.json(res.locals.user.tags.toObject().map(tag => { - return { - name: tag.name, - id: tag.id, - challenge: tag.challenge, - } - })); -}; - -api.getTag = function (req, res, next) { - let tag = _.find(res.locals.user.tags, {id: req.params.id}); - if (!tag) { - return res.status(404).json({err: i18n.t('messageTagNotFound', req.language)}); - } - - res.json({ - name: tag.name, - id: tag.id, - challenge: tag.challenge, - }); -}; - -api.addTag = function (req, res, next) { - let user = res.locals.user; - - user.tags.push(Tag.sanitize(req.body)); - user.save(function (err, user) { - if (err) return next(err); - - res.json(user.tags.toObject().map(tag => { - return { - name: tag.name, - id: tag.id, - challenge: tag.challenge, - } - })); - }); -}; - -api.updateTag = function (req, res, next) { - let user = res.locals.user; - - let tag = _.find(res.locals.user.tags, {id: req.params.id}); - if (!tag) { - return res.status(404).json({err: i18n.t('messageTagNotFound', req.language)}); - } - - tag.name = req.body.name; - user.save(function (err, user) { - if (err) return next(err); - - res.json({ - name: tag.name, - id: tag.id, - challenge: tag.challenge, - }); - }); -} - -api.sortTag = function (req, res, next) { - var ref = req.query; - var to = ref.to; - var from = ref.from; - let user = res.locals.user; - - if (!((to != null) && (from != null))) { - return res.statu(500).json('?to=__&from=__ are required'); - } - - user.tags.splice(to, 0, user.tags.splice(from, 1)[0]); - user.save(function (err, user) { - if (err) return next(err); - - res.json(user.tags.toObject().map(tag => { - return { - name: tag.name, - id: tag.id, - challenge: tag.challenge, - } - })); - }); -} - -api.deleteTag = function (req, res, next) { - let user = res.locals.user; - - let tag = removeFromArray(user.tags, { id: req.params.id }); - if (!tag) { - return res.status(404).json({err: i18n.t('messageTagNotFound', req.language)}); - } - - - Tasks.Task.update({ - userId: user._id, - }, { - $pull: { - tags: tag.id, - }, - }, {multi: true}).exec(); - - user.save(function (err, user) { - if (err) return next(err); - - res.json(user.tags.toObject().map(tag => { - return { - name: tag.name, - id: tag.id, - challenge: tag.challenge, - } - })); - }); -} - -/* - ------------------------------------------------------------------------ - Spells - ------------------------------------------------------------------------ - */ -api.cast = async function(req, res, next) { - try { - let user = res.locals.user; - let spellId = req.params.spell; - let targetId = req.query.targetId; - - if (spellId === 'heallAll') { - spellId = 'healAll'; - } else if (spellId === 'spookDust') { - spellId = 'spookySparkles'; - } - - let klass = shared.content.spells.special[spellId] ? 'special' : user.stats.class; - let spell = shared.content.spells[klass][spellId]; - - if (!spell) return res.status(404).json({err: 'Spell "' + req.params.spell + '" not found.'}); - if (spell.mana > user.stats.mp) return res.status(400).json({err: 'Not enough mana to cast spell'}); - - let targetType = spell.target; - - if (targetType === 'task') { - let task = await Tasks.Task.findOne({ - _id: targetId, - userId: user._id, - }).exec(); - if (!task) { - return res.status(404).json({err: 'Task "' + targetId + '" not found.'}); - } - if (task.challenge.id) return res.status(40).json({err: 'Cannot cast spell on challenge task.'}); - - - spell.cast(user, task, req); - await task.save(); - } else if (targetType === 'self') { - spell.cast(user, null, req); - await user.save(); - } else if (targetType === 'tasks') { // new target type when all the user's tasks are necessary - let tasks = await Tasks.Task.find({ - userId: user._id, - 'challenge.id': {$exists: false}, // exclude challenge tasks - $or: [ // Exclude completed todos - {type: 'todo', completed: false}, - {type: {$in: ['habit', 'daily', 'reward']}}, - ], - }).exec(); - - spell.cast(user, tasks, req); - - let toSave = tasks.filter(t => t.isModified()); - let isUserModified = user.isModified(); - toSave.unshift(user.save()); - let saved = await Bluebird.all(toSave); - } else if (targetType === 'party' || targetType === 'user') { - let party = await Group.getGroup({groupId: 'party', user}); - // arrays of users when targetType is 'party' otherwise single users - let partyMembers; - - if (targetType === 'party') { - if (!party) { - partyMembers = [user]; // Act as solo party - } else { - partyMembers = await User.find({'party._id': party._id}).select(partyMembersFields).exec(); - } - - spell.cast(user, partyMembers, req); - await Bluebird.all(partyMembers.map(m => m.save())); - } else { - if (!party && (!targetId || user._id === targetId)) { - partyMembers = user; - } else { - partyMembers = await User.findOne({_id: targetId, 'party._id': party._id}).select(partyMembersFields).exec(); - } - - if (!partyMembers) throw new NotFound(res.t('userWithIDNotFound', {userId: targetId})); - spell.cast(user, partyMembers, req); - if (partyMembers === user) { - await partyMembers.save(); - } else { - await Bluebird.all([ - await partyMembers.save(), - await user.save(), - ]); - } - } - - if (party && !spell.silent) { - let message = `\`${user.profile.name} casts ${spell.text()}${targetType === 'user' ? ` on ${partyMembers.profile.name}` : ' for the party'}.\``; - party.sendChat(message); - await party.save(); - } - } - - user.getTransformedData(function (err, transformedUser) { - if (err) next(err); - res.json(transformedUser); - }); - } catch (e) { - return res.status(500).json({err: 'An error happened'}); - } -} - -// It supports guild too now but we'll stick to partyInvite for backward compatibility -api.sessionPartyInvite = function(req,res,next){ - if (!req.session.partyInvite) return next(); - var inv = res.locals.user.invitations; - if (inv.party && inv.party.id) return next(); // already invited to a party - asyncM.waterfall([ - function(cb){ - Group.findOne({_id:req.session.partyInvite.id, members:{$in:[req.session.partyInvite.inviter]}}) - .select('invites members type').exec(cb); - }, - function(group, cb){ - if (!group){ - // Don't send error as it will prevent users from using the site - delete req.session.partyInvite; - return cb(); - } - - if (group.type == 'guild'){ - inv.guilds.push(req.session.partyInvite); - } else{ - //req.body.type in 'guild', 'party' - inv.party = req.session.partyInvite; - } - inv.party = req.session.partyInvite; - delete req.session.partyInvite; - if (!~group.invites.indexOf(res.locals.user._id)) - group.invites.push(res.locals.user._id); //$addToSt - group.save(cb); - }, - function(saved, cb){ - res.locals.user.save(cb); - } - ], next); -} - -api.clearCompleted = function(req, res, next) { - var user = res.locals.user; - - Tasks.Task.remove({ - userId: user._id, - type: 'todo', - completed: true, - 'challenge.id': {$exists: false}, - }, function (err) { - if (err) return next(err); - - Tasks.Task.find({ - userId: user._id, - type: 'todo', - completed: false, - }, function (err, uncompleted) { - if (err) return next(err); - res.json(uncompleted); - }); - }); -}; - -api.sortTask = async function (req, res, next) { - try { - let user = res.locals.user; - let to = Number(req.query.to); - - let task = await Tasks.Task.findOne({ - _id: req.params.id, - userId: user._id, - }).exec(); - - if (!task) return res.status(404).json(i18n.t('messageTaskNotFound', req.language)); - if (task.type !== 'todo' || !task.completed) { - let order = user.tasksOrder[`${task.type}s`]; - let currentIndex = order.indexOf(task._id); - - // If for some reason the task isn't ordered (should never happen), push it in the new position - // if the task is moved to a non existing position - // or if the task is moved to position -1 (push to bottom) - // -> push task at end of list - if (!order[to] && to !== -1) { - order.push(task._id); - } else { - if (currentIndex !== -1) order.splice(currentIndex, 1); - if (to === -1) { - order.push(task._id); - } else { - order.splice(to, 0, task._id); - } - } - await user.save(); - } - - user.getTasks(function (err, userTasks) { - if(err) return next(err); - res.json(userTasks); - }); - } catch (e) { - res.status(500).json({err: 'An error happened.'}); - } -} - -api.deleteTask = function(req, res, next) { - var user = res.locals.user; - if(!req.params || !req.params.id) return res.json(404, shared.i18n.t('messageTaskNotFound', req.language)); - - var id = req.params.id; - // Try removing from all orders since we don't know the task's type - var removeTaskFromOrder = function(array) { - removeFromArray(array, id); - }; - - ['habits', 'dailys', 'todos', 'rewards'].forEach(function (type){ - removeTaskFromOrder(user.tasksOrder[type]) - }); - - asyncM.parallel({ - user: user.save.bind(user), - task: function(cb) { - Tasks.Task.remove({_id: id, userId: user._id}, cb); - } - }, function(err, results) { - if(err) return next(err); - - if(results.task.result.n < 1){ - return res.status(404).json({err: shared.i18n.t('messageTaskNotFound', req.language)}) - } - - res.status(200).json({}); - }); -}; - -api.updateTask = function(req, res, next) { - var user = res.locals.user, - id = req.params.id; - - req.body = Tasks.Task.fromJSONV2(req.body); - - findTaskByIdOrLegacyId(user, id, function (err, task) { - if(err) return next(err); - if(!task) return res.status(404).json({err: 'Task not found.'}) - - try { - // we have to convert task to an object because otherwise things don't get merged correctly. Bad for performances? - let [updatedTaskObj] = shared.ops.updateTask(task.toObject(), req); - - // Sanitize differently user tasks linked to a challenge - let sanitizedObj; - - if (task.userId && task.challenge && task.challenge.id) { - sanitizedObj = Tasks.Task.sanitizeUserChallengeTask(updatedTaskObj); - } else { - sanitizedObj = Tasks.Task.sanitize(updatedTaskObj); - } - - _.assign(task, sanitizedObj); - - task.save(function(err, task){ - if(err) return next(err); - - return res.json(task.toJSONV2()); - }); - } catch (err) { - return res.status(err.code).json({err: err.message}); - } - }); -}; - -api.addTask = function(req, res, next) { - var user = res.locals.user; - req.body.type = req.body.type || 'habit'; - req.body.text = req.body.text || 'text'; - req.body = Tasks.Task.fromJSONV2(req.body); - - var task = new Tasks[req.body.type](Tasks.Task.sanitize(req.body)); - - task.userId = user._id; - user.tasksOrder[task.type + 's'].unshift(task._id); - - // Validate that the task is valid and throw if it isn't - // otherwise since we're saving user/challenge and task in parallel it could save the user/challenge with a tasksOrder that doens't match reality - let validationErrors = task.validateSync(); - if (validationErrors) return next(validationErrors); - - Bluebird.all([ - user.save(), - task.save({validateBeforeSave: false}) // already done ^ - ]).then(results => { - res.status(200).json(results[1].toJSONV2()); - }).catch(next); -}; - -/** - * All other user.ops which can easily be mapped to common/script/index.js, not requiring custom API-wrapping - */ -_.each(shared.ops, function(op,k){ - var kv3; - - if (['rebirth', 'reroll', 'reset'].indexOf(k) !== -1) { // proxy ops that change tasks directly to v3 - if (k === 'rebirth') kv3 = 'userRebirth'; // the name is different in v3 - if (k === 'reroll') kv3 = 'userReroll'; - if (k === 'reset') kv3 = 'userReset'; - - api[k] = function (req, res, next) { - req.v2 = true; - v3UserController[kv3].handler(req, res, next).catch(next); - } - } else if (!api[k]) { - api[k] = function(req, res, next) { - var opResponse; - try { - req.v2 = true; // Used to indicate to the shared code that the old response data should be returned - opResponse = shared.ops[k](res.locals.user, req, analytics); - if (Array.isArray(opResponse) && opResponse.length < 3) { - opResponse = opResponse[0]; - } - } catch (err) { - if (!err.code) return next(err); - if (err.code >= 400) return res.status(err.code).json({err:err.message}); - } - - // If we want to send something other than 500, pass err as {code: 200, message: "Not enough GP"} - res.locals.user.save(function(err){ - if (err) return next(err); - if (opResponse === res.locals.user) { // add tasks - res.locals.user.getTransformedData(function (err, transformedUser) { - if (err) return next(err); - res.status(200).json(transformedUser); - }); - } else { - res.status(200).json(opResponse); - } - }); - } - } -}) - -/* - ------------------------------------------------------------------------ - Batch Update - Run a bunch of updates all at once - ------------------------------------------------------------------------ -*/ -api.batchUpdate = function(req, res, next) { - if (_.isEmpty(req.body)) req.body = []; // cases of {} or null - if (req.body[0] && req.body[0].data) - return res.status(501).json({err: "API has been updated, please refresh your browser or upgrade your mobile app."}) - - var user = res.locals.user; - var oldSend = res.send; - var oldJson = res.json; - - // Stash user.save, we'll queue the save op till the end (so we don't overload the server) - //var oldSave = user.save; - //user.save = function(cb){cb(null,user)} - - // Setup the array of functions we're going to call in parallel with async - res.locals.ops = []; - var ops = _.transform(req.body, function(m,_req){ - if (_.isEmpty(_req)) return; - _req.language = req.language; - - m.push(function() { - var cb = arguments[arguments.length-1]; - res.locals.ops.push(_req); - res.send = res.json = function(code, data) { - if (_.isNumber(code) && code >= 500) - return cb(code+": "+ (data.message ? data.message : data.err ? data.err : JSON.stringify(data))); - return cb(); - }; - if(!api[_req.op]) { return cb(shared.i18n.t('messageUserOperationNotFound', { operation: _req.op })); } - - api[_req.op](_req, res, cb); - }); - }) - // Finally, save user at the end - .concat(/*function(){ - user.save = oldSave; - user.save(arguments[arguments.length-1]); - }*/); - - // call all the operations, then return the user object to the requester - asyncM.waterfall(ops, function(err) { - res.json = oldJson; - res.send = oldSend; - if (err) return next(err); - - var response; - - // return only drops & streaks - if (user._tmp && user._tmp.drop){ - response = user.toJSON(); - res.status(200).json({_tmp: {drop: response._tmp.drop}, _v: response._v}); - - // Fetch full user object - } else if (res.locals.wasModified){ - // Preen 3-day past-completed To-Dos from Angular & mobile app - user.getTransformedData(function(err, transformedData){ - if (err) next(err); - response = transformedData; - - response.todos = shared.preenTodos(response.todos); - response.wasModified = true; - res.status(200).json(response); - }); - // return only the version number - } else{ - response = user.toJSON(); - res.status(200).json({_v: response._v}); - } - - //user.fns.nullify(); - user = res.locals.user = oldSend = oldJson = null; - }); -}; - -function _generateWebhookTaskData(task, direction, delta, stats, user) { - var extendedStats = _.extend(stats, { - toNextLevel: shared.tnl(user.stats.lvl), - maxHealth: shared.maxHealth, - maxMP: user._statsComputed.maxMP - }); - - var userData = { - _id: user._id, - _tmp: user._tmp, - stats: extendedStats - }; - - var taskData = { - details: task, - direction: direction, - delta: delta - } - - return { - task: taskData, - user: userData - } -} diff --git a/website/server/controllers/api-v3/auth.js b/website/server/controllers/api-v3/auth.js index d69597808d..eae17136ed 100644 --- a/website/server/controllers/api-v3/auth.js +++ b/website/server/controllers/api-v3/auth.js @@ -4,22 +4,22 @@ import passport from 'passport'; import nconf from 'nconf'; import { authWithHeaders, -} from '../../middlewares/api-v3/auth'; +} from '../../middlewares/auth'; import { NotAuthorized, BadRequest, NotFound, -} from '../../libs/api-v3/errors'; +} from '../../libs/errors'; import Bluebird from 'bluebird'; -import * as passwordUtils from '../../libs/api-v3/password'; -import logger from '../../libs/api-v3/logger'; +import * as passwordUtils from '../../libs/password'; +import logger from '../../libs/logger'; import { model as User } from '../../models/user'; import { model as Group } from '../../models/group'; import { model as EmailUnsubscription } from '../../models/emailUnsubscription'; -import { sendTxn as sendTxnEmail } from '../../libs/api-v3/email'; -import { decrypt } from '../../libs/api-v3/encryption'; -import { send as sendEmail } from '../../libs/api-v3/email'; -import pusher from '../../libs/api-v3/pusher'; +import { sendTxn as sendTxnEmail } from '../../libs/email'; +import { decrypt } from '../../libs/encryption'; +import { send as sendEmail } from '../../libs/email'; +import pusher from '../../libs/pusher'; let api = {}; @@ -163,7 +163,7 @@ api.registerLocal = { function _loginRes (user, req, res) { if (user.auth.blocked) throw new NotAuthorized(res.t('accountSuspended', {userId: user._id})); - return res.respond(200, {id: user._id, apiToken: user.apiToken}); + return res.respond(200, {id: user._id, apiToken: user.apiToken, newUser: user.newUser || false}); } /** @@ -178,6 +178,7 @@ function _loginRes (user, req, res) { * * @apiSuccess {String} data._id The user's unique identifier * @apiSuccess {String} data.apiToken The user's api token that must be used to authenticate requests. + * @apiSuccess {Boolean} data.newUser Returns true if the user was just created (always false for local login). */ api.loginLocal = { method: 'POST', @@ -260,6 +261,7 @@ api.loginSocial = { let savedUser = await user.save(); + user.newUser = true; _loginRes(user, ...arguments); // Clean previous email preferences @@ -359,8 +361,8 @@ api.pusherAuth = { * @apiName UpdateUsername * @apiGroup User * - * @apiParam {string} password Body parameter - The current user password - * @apiParam {string} username Body parameter - The new username + * @apiParam {String} password Body parameter - The current user password + * @apiParam {String} username Body parameter - The new username * @apiSuccess {String} data.username The new username **/ @@ -407,9 +409,9 @@ api.updateUsername = { * @apiName UpdatePassword * @apiGroup User * - * @apiParam {string} password Body parameter - The old password - * @apiParam {string} newPassword Body parameter - The new password - * @apiParam {string} confirmPassword Body parameter - New password confirmation + * @apiParam {String} password Body parameter - The old password + * @apiParam {String} newPassword Body parameter - The new password + * @apiParam {String} confirmPassword Body parameter - New password confirmation * * @apiSuccess {Object} data An empty object **/ @@ -458,9 +460,9 @@ api.updatePassword = { * @apiName ResetPassword * @apiGroup User * - * @apiParam {string} email Body parameter - The email address of the user + * @apiParam {String} email Body parameter - The email address of the user * - * @apiSuccess {string} message The localized success message + * @apiSuccess {String} message The localized success message **/ api.resetPassword = { method: 'POST', @@ -513,10 +515,10 @@ api.resetPassword = { * @apiName UpdateEmail * @apiGroup User * - * @apiParam {string} Body parameter - newEmail The new email address. - * @apiParam {string} Body parameter - password The user password. + * @apiParam {String} Body parameter - newEmail The new email address. + * @apiParam {String} Body parameter - password The user password. * - * @apiSuccess {string} data.email The updated email address + * @apiSuccess {String} data.email The updated email address */ api.updateEmail = { method: 'PUT', diff --git a/website/server/controllers/api-v3/challenges.js b/website/server/controllers/api-v3/challenges.js index c302e941cb..60a73b1a19 100644 --- a/website/server/controllers/api-v3/challenges.js +++ b/website/server/controllers/api-v3/challenges.js @@ -1,4 +1,4 @@ -import { authWithHeaders, authWithSession } from '../../middlewares/api-v3/auth'; +import { authWithHeaders, authWithSession } from '../../middlewares/auth'; import _ from 'lodash'; import { model as Challenge } from '../../models/challenge'; import { @@ -13,10 +13,10 @@ import { import { NotFound, NotAuthorized, -} from '../../libs/api-v3/errors'; +} from '../../libs/errors'; import * as Tasks from '../../models/task'; import Bluebird from 'bluebird'; -import csvStringify from '../../libs/api-v3/csvStringify'; +import csvStringify from '../../libs/csvStringify'; let api = {}; @@ -26,7 +26,7 @@ let api = {}; * @apiName CreateChallenge * @apiGroup Challenge * - * @apiSuccess {object} data The newly created challenge + * @apiSuccess {Object} data The newly created challenge */ api.createChallenge = { method: 'POST', @@ -117,7 +117,7 @@ api.createChallenge = { * @apiGroup Challenge * @apiParam {UUID} challengeId The challenge _id * - * @apiSuccess {object} data The challenge the user joined + * @apiSuccess {Object} data The challenge the user joined */ api.joinChallenge = { method: 'POST', @@ -164,7 +164,7 @@ api.joinChallenge = { * @apiGroup Challenge * @apiParam {UUID} challengeId The challenge _id * - * @apiSuccess {object} data An empty object + * @apiSuccess {Object} data An empty object */ api.leaveChallenge = { method: 'POST', @@ -246,7 +246,7 @@ api.getUserChallenges = { * @apiName GetGroupChallenges * @apiGroup Challenge * - * @apiParam {groupId} groupId The group _id + * @apiParam {UUID} groupId The group _id * * @apiSuccess {Array} data An array of challenges sorted with official challenges first, followed by the challenges in order from newest to oldest */ @@ -291,7 +291,7 @@ api.getGroupChallenges = { * * @apiParam {UUID} challengeId The challenge _id * - * @apiSuccess {object} data The challenge object + * @apiSuccess {Object} data The challenge object */ api.getChallenge = { method: 'GET', @@ -334,7 +334,7 @@ api.getChallenge = { * * @apiParam {UUID} challengeId The challenge _id * - * @apiSuccess {string} challenge A csv file + * @apiSuccess {String} challenge A csv file */ api.exportChallengeCsv = { method: 'GET', @@ -407,7 +407,7 @@ api.exportChallengeCsv = { * * @apiParam {UUID} challengeId The challenge _id * - * @apiSuccess {object} data The updated challenge + * @apiSuccess {Object} data The updated challenge */ api.updateChallenge = { method: 'PUT', @@ -453,7 +453,7 @@ api.updateChallenge = { * * @apiParam {UUID} challengeId The _id for the challenge to delete * - * @apiSuccess {object} data An empty object + * @apiSuccess {Object} data An empty object */ api.deleteChallenge = { method: 'DELETE', @@ -486,7 +486,7 @@ api.deleteChallenge = { * @apiParam {UUID} challengeId The _id for the challenge to close with a winner * @apiParam {UUID} winnerId The _id of the winning user * - * @apiSuccess {object} data An empty object + * @apiSuccess {Object} data An empty object */ api.selectChallengeWinner = { method: 'POST', diff --git a/website/server/controllers/api-v3/chat.js b/website/server/controllers/api-v3/chat.js index ddc9182ed1..365dac2ba1 100644 --- a/website/server/controllers/api-v3/chat.js +++ b/website/server/controllers/api-v3/chat.js @@ -1,14 +1,14 @@ -import { authWithHeaders } from '../../middlewares/api-v3/auth'; +import { authWithHeaders } from '../../middlewares/auth'; import { model as Group } from '../../models/group'; import { model as User } from '../../models/user'; import { NotFound, NotAuthorized, -} from '../../libs/api-v3/errors'; +} from '../../libs/errors'; import _ from 'lodash'; -import { removeFromArray } from '../../libs/api-v3/collectionManipulators'; -import { getUserInfo, getGroupUrl, sendTxn } from '../../libs/api-v3/email'; -import pusher from '../../libs/api-v3/pusher'; +import { removeFromArray } from '../../libs/collectionManipulators'; +import { getUserInfo, getGroupUrl, sendTxn } from '../../libs/email'; +import pusher from '../../libs/pusher'; import nconf from 'nconf'; import Bluebird from 'bluebird'; @@ -24,7 +24,7 @@ let api = {}; * @apiName GetChat * @apiGroup Chat * - * @apiParam {string} groupId The group _id ('party' for the user party and 'habitrpg' for tavern are accepted) + * @apiParam {String} groupId The group _id ('party' for the user party and 'habitrpg' for tavern are accepted) * * @apiSuccess {Array} data An array of chat messages */ @@ -54,7 +54,7 @@ api.getChat = { * @apiGroup Chat * * @apiParam {UUID} groupId The group _id ('party' for the user party and 'habitrpg' for tavern are accepted) - * @apiParam {string} message Body parameter - message The message to post + * @apiParam {String} message Body parameter - message The message to post * @apiParam {UUID} previousMsg Query parameter - The previous chat message which will force a return of the full group chat * * @apiSuccess data An array of chat messages if a new message was posted after previousMsg, otherwise the posted message @@ -166,7 +166,7 @@ api.likeChat = { * @apiParam {UUID} groupId The group _id ('party' for the user party and 'habitrpg' for tavern are accepted) * @apiParam {UUID} chatId The chat message id * - * @apiSuccess {object} data The flagged chat message + * @apiSuccess {Object} data The flagged chat message */ api.flagChat = { method: 'POST', @@ -362,7 +362,7 @@ api.seenChat = { * @apiName DeleteChat * @apiGroup Chat * - * @apiParam {string} previousMsg Query parameter - The last message fetched by the client so that the whole chat will be returned only if new messages have been posted in the meantime + * @apiParam {String} previousMsg Query parameter - The last message fetched by the client so that the whole chat will be returned only if new messages have been posted in the meantime * @apiParam {UUID} groupId The group _id ('party' for the user party and 'habitrpg' for tavern are accepted) * @apiParam {UUID} chatId The chat message id * diff --git a/website/server/controllers/api-v3/content.js b/website/server/controllers/api-v3/content.js index 0235f61645..02b950cd8f 100644 --- a/website/server/controllers/api-v3/content.js +++ b/website/server/controllers/api-v3/content.js @@ -1,10 +1,10 @@ import common from '../../../../common'; import _ from 'lodash'; -import { langCodes } from '../../libs/api-v3/i18n'; +import { langCodes } from '../../libs/i18n'; import Bluebird from 'bluebird'; import fsCallback from 'fs'; import path from 'path'; -import logger from '../../libs/api-v3/logger'; +import logger from '../../libs/logger'; // Transform fs methods that accept callbacks in ones that return promises const fs = { @@ -67,7 +67,7 @@ async function saveContentToDisk (language, content) { * @apiName ContentGet * @apiGroup Content * - * @apiParam {string} language Query parameter, the language code used for the items' strings. Defaulting to english + * @apiParam {String} language Query parameter, the language code used for the items' strings. Defaulting to english * * @apiSuccess {Object} data All the content available on Habitica */ diff --git a/website/server/controllers/api-v3/coupon.js b/website/server/controllers/api-v3/coupon.js index 4dc434aa8c..3d7db33459 100644 --- a/website/server/controllers/api-v3/coupon.js +++ b/website/server/controllers/api-v3/coupon.js @@ -1,9 +1,9 @@ -import csvStringify from '../../libs/api-v3/csvStringify'; +import csvStringify from '../../libs/csvStringify'; import { authWithHeaders, authWithSession, -} from '../../middlewares/api-v3/auth'; -import { ensureSudo } from '../../middlewares/api-v3/ensureAccessRight'; +} from '../../middlewares/auth'; +import { ensureSudo } from '../../middlewares/ensureAccessRight'; import { model as Coupon } from '../../models/coupon'; import _ from 'lodash'; import couponCode from 'coupon-code'; @@ -17,7 +17,7 @@ let api = {}; * @apiName GetCoupons * @apiGroup Coupon * - * @apiSuccess {string} Coupons in CSV format + * @apiSuccess {String} Coupons in CSV format */ api.getCoupons = { method: 'GET', @@ -46,10 +46,10 @@ api.getCoupons = { * @apiName GenerateCoupons * @apiGroup Coupon * - * @apiParam {string} event The event for which the coupon should be generated - * @apiParam {number} count Query parameter to specify the number of coupon codes to generate + * @apiParam {String} event The event for which the coupon should be generated + * @apiParam {Number} count Query parameter to specify the number of coupon codes to generate * - * @apiSuccess {array} data Generated coupons + * @apiSuccess {Array} data Generated coupons */ api.generateCoupons = { method: 'POST', @@ -73,9 +73,9 @@ api.generateCoupons = { * @apiName EnterCouponCode * @apiGroup Coupon * - * @apiParam {string} code The coupon code to apply + * @apiParam {String} code The coupon code to apply * - * @apiSuccess {object} data User object + * @apiSuccess {Object} data User object */ api.enterCouponCode = { method: 'POST', @@ -100,7 +100,7 @@ api.enterCouponCode = { * @apiName ValidateCoupon * @apiGroup Coupon * - * @apiSuccess {boolean} data.valid True or false + * @apiSuccess {Boolean} data.valid True or false */ api.validateCoupon = { method: 'POST', diff --git a/website/server/controllers/api-v3/debug.js b/website/server/controllers/api-v3/debug.js index 8533d995ff..67d38bef49 100644 --- a/website/server/controllers/api-v3/debug.js +++ b/website/server/controllers/api-v3/debug.js @@ -1,6 +1,6 @@ -import { authWithHeaders } from '../../middlewares/api-v3/auth'; -import ensureDevelpmentMode from '../../middlewares/api-v3/ensureDevelpmentMode'; -import { BadRequest } from '../../libs/api-v3/errors'; +import { authWithHeaders } from '../../middlewares/auth'; +import ensureDevelpmentMode from '../../middlewares/ensureDevelpmentMode'; +import { BadRequest } from '../../libs/errors'; import { content } from '../../../../common'; import _ from 'lodash'; diff --git a/website/server/controllers/api-v3/groups.js b/website/server/controllers/api-v3/groups.js index 75c089a5c6..f909bc188e 100644 --- a/website/server/controllers/api-v3/groups.js +++ b/website/server/controllers/api-v3/groups.js @@ -1,4 +1,4 @@ -import { authWithHeaders } from '../../middlewares/api-v3/auth'; +import { authWithHeaders } from '../../middlewares/auth'; import Bluebird from 'bluebird'; import _ from 'lodash'; import { @@ -15,12 +15,12 @@ import { NotFound, BadRequest, NotAuthorized, -} from '../../libs/api-v3/errors'; -import { removeFromArray } from '../../libs/api-v3/collectionManipulators'; -import { sendTxn as sendTxnEmail } from '../../libs/api-v3/email'; -import { encrypt } from '../../libs/api-v3/encryption'; -import sendPushNotification from '../../libs/api-v3/pushNotifications'; -import pusher from '../../libs/api-v3/pusher'; +} from '../../libs/errors'; +import { removeFromArray } from '../../libs/collectionManipulators'; +import { sendTxn as sendTxnEmail } from '../../libs/email'; +import { encrypt } from '../../libs/encryption'; +import sendPushNotification from '../../libs/pushNotifications'; +import pusher from '../../libs/pusher'; let api = {}; @@ -76,7 +76,7 @@ api.createGroup = { * @apiName GetGroups * @apiGroup Group * - * @apiParam {string} type The type of groups to retrieve. Must be a query string representing a list of values like 'tavern,party'. Possible values are party, guilds, privateGuilds, publicGuilds, tavern + * @apiParam {String} type The type of groups to retrieve. Must be a query string representing a list of values like 'tavern,party'. Possible values are party, guilds, privateGuilds, publicGuilds, tavern * * @apiSuccess {Array} data An array of the requested groups */ @@ -107,7 +107,7 @@ api.getGroups = { * @apiName GetGroup * @apiGroup Group * - * @apiParam {string} groupId The group _id ('party' for the user party and 'habitrpg' for tavern are accepted) + * @apiParam {String} groupId The group _id ('party' for the user party and 'habitrpg' for tavern are accepted) * * @apiSuccess {Object} data The group object */ @@ -142,7 +142,7 @@ api.getGroup = { * @apiName UpdateGroup * @apiGroup Group * - * @apiParam {string} groupId The group _id ('party' for the user party and 'habitrpg' for tavern are accepted) + * @apiParam {String} groupId The group _id ('party' for the user party and 'habitrpg' for tavern are accepted) * * @apiSuccess {Object} data The updated group */ @@ -328,8 +328,8 @@ api.rejectGroupInvite = { * @apiName LeaveGroup * @apiGroup Group * - * @apiParam {string} groupId The group _id ('party' for the user party and 'habitrpg' for tavern are accepted) - * @apiParam {string="remove-all","keep-all"} keep Query parameter - Whether to keep or not challenges' tasks. Defaults to keep-all + * @apiParam {String} groupId The group _id ('party' for the user party and 'habitrpg' for tavern are accepted) + * @apiParam {String="remove-all","keep-all"} keep Query parameter - Whether to keep or not challenges' tasks. Defaults to keep-all * * @apiSuccess {Object} data An empty object */ @@ -384,9 +384,9 @@ function _sendMessageToRemoved (group, removedUser, message) { * @apiName RemoveGroupMember * @apiGroup Group * - * @apiParam {string} groupId The group _id ('party' for the user party and 'habitrpg' for tavern are accepted) + * @apiParam {String} groupId The group _id ('party' for the user party and 'habitrpg' for tavern are accepted) * @apiParam {UUID} memberId The _id of the member to remove - * @apiParam {string} message Query parameter - The message to send to the removed members + * @apiParam {String} message Query parameter - The message to send to the removed members * * @apiSuccess {Object} data An empty object */ @@ -436,7 +436,7 @@ api.removeGroupMember = { group.quest.leader = undefined; } else if (group.quest && group.quest.members) { // remove member from quest - group.quest.members[member._id] = undefined; + delete group.quest.members[member._id]; group.markModified('quest.members'); } @@ -606,13 +606,13 @@ async function _inviteByEmail (invite, group, inviter, req, res) { * @apiName InviteToGroup * @apiGroup Group * - * @apiParam {string} groupId The group _id ('party' for the user party and 'habitrpg' for tavern are accepted) + * @apiParam {String} groupId The group _id ('party' for the user party and 'habitrpg' for tavern are accepted) * - * @apiParam {array} emails Body parameter - An array of emails addresses to invite (optional) - * @apiParam {array} uuids Body parameter - An array of uuids to invite (optional) - * @apiParam {string} inviter Body parameter - The inviters' name (optional) + * @apiParam {Array} emails Body parameter - An array of emails addresses to invite (optional) + * @apiParam {Array} uuids Body parameter - An array of uuids to invite (optional) + * @apiParam {String} inviter Body parameter - The inviters' name (optional) * - * @apiSuccess {array} data The invites + * @apiSuccess {Array} data The invites */ api.inviteToGroup = { method: 'POST', diff --git a/website/server/controllers/api-v3/hall.js b/website/server/controllers/api-v3/hall.js index cf589eef84..218fe5291a 100644 --- a/website/server/controllers/api-v3/hall.js +++ b/website/server/controllers/api-v3/hall.js @@ -1,9 +1,9 @@ -import { authWithHeaders } from '../../middlewares/api-v3/auth'; -import { ensureAdmin } from '../../middlewares/api-v3/ensureAccessRight'; +import { authWithHeaders } from '../../middlewares/auth'; +import { ensureAdmin } from '../../middlewares/ensureAccessRight'; import { model as User } from '../../models/user'; import { NotFound, -} from '../../libs/api-v3/errors'; +} from '../../libs/errors'; import _ from 'lodash'; let api = {}; diff --git a/website/server/controllers/api-v3/members.js b/website/server/controllers/api-v3/members.js index f539dbc469..43d081a481 100644 --- a/website/server/controllers/api-v3/members.js +++ b/website/server/controllers/api-v3/members.js @@ -1,4 +1,4 @@ -import { authWithHeaders } from '../../middlewares/api-v3/auth'; +import { authWithHeaders } from '../../middlewares/auth'; import { model as User, publicFields as memberFields, @@ -9,14 +9,14 @@ import { model as Challenge } from '../../models/challenge'; import { NotFound, NotAuthorized, -} from '../../libs/api-v3/errors'; +} from '../../libs/errors'; import * as Tasks from '../../models/task'; import { getUserInfo, sendTxn as sendTxnEmail, -} from '../../libs/api-v3/email'; +} from '../../libs/email'; import Bluebird from 'bluebird'; -import sendPushNotification from '../../libs/api-v3/pushNotifications'; +import sendPushNotification from '../../libs/pushNotifications'; let api = {}; @@ -28,7 +28,7 @@ let api = {}; * * @apiParam {UUID} memberId The member's id * - * @apiSuccess {object} data The member object + * @apiSuccess {Object} data The member object */ api.getMember = { method: 'GET', @@ -50,7 +50,10 @@ api.getMember = { if (!member) throw new NotFound(res.t('userWithIDNotFound', {userId: memberId})); // manually call toJSON with minimize: true so empty paths aren't returned - res.respond(200, member.toJSON({minimize: true})); + let memberToJSON = member.toJSON({minimize: true}); + member.addComputedStatsToJSONObj(memberToJSON); + + res.respond(200, memberToJSON); }, }; @@ -100,6 +103,7 @@ function _getMembersForItem (type) { let query = {}; let fields = nameFields; + let addComputedStats = false; // add computes stats to the member info when items and stats are available if (type === 'challenge-members') { query.challenges = challenge._id; @@ -111,6 +115,7 @@ function _getMembersForItem (type) { if (req.query.includeAllPublicFields === 'true') { fields = memberFields; + addComputedStats = true; } } } else if (type === 'group-invites') { @@ -138,7 +143,13 @@ function _getMembersForItem (type) { .exec(); // manually call toJSON with minimize: true so empty paths aren't returned - res.respond(200, members.map(member => member.toJSON({minimize: true}))); + let membersToJSON = members.map(member => { + let memberToJSON = member.toJSON({minimize: true}); + if (addComputedStats) member.addComputedStatsToJSONObj(memberToJSON); + + return memberToJSON; + }); + res.respond(200, membersToJSON); }; } @@ -194,7 +205,7 @@ api.getInvitesForGroup = { * * @apiParam {UUID} challengeId The challenge id * @apiParam {UUID} lastId Query parameter to specify the last member returned in a previous request to this route and get the next batch of results - * @apiParam {string} includeAllMembers BETA Query parameter - If 'true' all challenge members are returned + * @apiParam {String} includeAllMembers BETA Query parameter - If 'true' all challenge members are returned * @apiSuccess {array} data An array of members, sorted by _id */ @@ -214,7 +225,7 @@ api.getMembersForChallenge = { * @apiParam {UUID} challengeId The challenge _id * @apiParam {UUID} member The member _id * - * @apiSuccess {object} data Return an object with member _id, profile.name and a tasks object with the challenge tasks for the member + * @apiSuccess {Object} data Return an object with member _id, profile.name and a tasks object with the challenge tasks for the member */ api.getChallengeMemberProgress = { method: 'GET', diff --git a/website/server/controllers/api-v3/modelsPaths.js b/website/server/controllers/api-v3/modelsPaths.js index 927087df01..9c5478d124 100644 --- a/website/server/controllers/api-v3/modelsPaths.js +++ b/website/server/controllers/api-v3/modelsPaths.js @@ -12,9 +12,9 @@ let allModels = ['user', 'tag', 'challenge', 'group'].concat(tasksModels); * @apiName GetUserModelPaths * @apiGroup Meta * - * @apiParam {string="user","group","challenge","tag","habit","daily","todo","reward"} model The name of the model + * @apiParam {String="user","group","challenge","tag","habit","daily","todo","reward"} model The name of the model * - * @apiSuccess {object} data A key-value object made of fieldPath: fieldType (like {'field.nested': Boolean}) + * @apiSuccess {Object} data A key-value object made of fieldPath: fieldType (like {'field.nested': Boolean}) */ api.getModelPaths = { method: 'GET', diff --git a/website/server/controllers/api-v3/notifications.js b/website/server/controllers/api-v3/notifications.js index 7130b1bc56..2fda343ac7 100644 --- a/website/server/controllers/api-v3/notifications.js +++ b/website/server/controllers/api-v3/notifications.js @@ -1,8 +1,8 @@ -import { authWithHeaders } from '../../middlewares/api-v3/auth'; +import { authWithHeaders } from '../../middlewares/auth'; import _ from 'lodash'; import { NotFound, -} from '../../libs/api-v3/errors'; +} from '../../libs/errors'; let api = {}; diff --git a/website/server/controllers/api-v3/pushNotifications.js b/website/server/controllers/api-v3/pushNotifications.js index 49ff1abd3c..c0ed3506f2 100644 --- a/website/server/controllers/api-v3/pushNotifications.js +++ b/website/server/controllers/api-v3/pushNotifications.js @@ -1,8 +1,8 @@ -import { authWithHeaders } from '../../middlewares/api-v3/auth'; +import { authWithHeaders } from '../../middlewares/auth'; import { NotAuthorized, NotFound, -} from '../../libs/api-v3/errors'; +} from '../../libs/errors'; let api = {}; @@ -13,11 +13,11 @@ let api = {}; * @apiName UserAddPushDevice * @apiGroup User * - * @apiParam {string} regId The id of the push device - * @apiParam {string} type The type of push device + * @apiParam {String} regId The id of the push device + * @apiParam {String} type The type of push device * * @apiSuccess {Object} data List of push devices - * @apiSuccess {string} message Success message + * @apiSuccess {String} message Success message */ api.addPushDevice = { method: 'POST', @@ -58,10 +58,10 @@ api.addPushDevice = { * @apiName UserRemovePushDevice * @apiGroup User * - * @apiParam {string} regId The id of the push device + * @apiParam {String} regId The id of the push device * * @apiSuccess {Object} data List of push devices - * @apiSuccess {string} message Success message + * @apiSuccess {String} message Success message */ api.removePushDevice = { method: 'DELETE', diff --git a/website/server/controllers/api-v3/quests.js b/website/server/controllers/api-v3/quests.js index e5afa27abb..d06638c9ce 100644 --- a/website/server/controllers/api-v3/quests.js +++ b/website/server/controllers/api-v3/quests.js @@ -1,7 +1,7 @@ import _ from 'lodash'; import Bluebird from 'bluebird'; -import { authWithHeaders } from '../../middlewares/api-v3/auth'; -import analytics from '../../libs/api-v3/analyticsService'; +import { authWithHeaders } from '../../middlewares/auth'; +import analytics from '../../libs/analyticsService'; import { model as Group, } from '../../models/group'; @@ -10,13 +10,13 @@ import { NotFound, NotAuthorized, BadRequest, -} from '../../libs/api-v3/errors'; +} from '../../libs/errors'; import { getUserInfo, sendTxn as sendTxnEmail, -} from '../../libs/api-v3/email'; +} from '../../libs/email'; import common from '../../../../common'; -import sendPushNotification from '../../libs/api-v3/pushNotifications'; +import sendPushNotification from '../../libs/pushNotifications'; const questScrolls = common.content.quests; @@ -34,8 +34,8 @@ let api = {}; * @apiName InviteToQuest * @apiGroup Group * - * @apiParam {string} groupId The group _id (or 'party') - * @apiParam {string} questKey + * @apiParam {String} groupId The group _id (or 'party') + * @apiParam {String} questKey * * @apiSuccess {Object} data Quest object */ @@ -145,7 +145,7 @@ api.inviteToQuest = { * @apiName AcceptQuest * @apiGroup Group * - * @apiParam {string} groupId The group _id (or 'party') + * @apiParam {String} groupId The group _id (or 'party') * * @apiSuccess {Object} data Quest Object */ @@ -161,6 +161,9 @@ api.acceptQuest = { let validationErrors = req.validationErrors(); if (validationErrors) throw validationErrors; + user.party.quest.RSVPNeeded = false; + await user.save(); + let group = await Group.getGroup({user, groupId: req.params.groupId, fields: 'type quest'}); if (!group) throw new NotFound(res.t('groupNotFound')); @@ -171,16 +174,12 @@ api.acceptQuest = { group.markModified('quest'); group.quest.members[user._id] = true; - user.party.quest.RSVPNeeded = false; if (canStartQuestAutomatically(group)) { await group.startQuest(user); } - let [savedGroup] = await Bluebird.all([ - group.save(), - user.save(), - ]); + let savedGroup = await group.save(); res.respond(200, savedGroup.quest); @@ -202,7 +201,7 @@ api.acceptQuest = { * @apiName RejectQuest * @apiGroup Group * - * @apiParam {string} groupId The group _id (or 'party') + * @apiParam {String} groupId The group _id (or 'party') * * @apiSuccess {Object} data Quest Object */ @@ -218,6 +217,10 @@ api.rejectQuest = { let validationErrors = req.validationErrors(); if (validationErrors) throw validationErrors; + user.party.quest = Group.cleanQuestProgress(); + user.markModified('party.quest'); + await user.save(); + let group = await Group.getGroup({user, groupId: req.params.groupId, fields: 'type quest'}); if (!group) throw new NotFound(res.t('groupNotFound')); if (group.type !== 'party') throw new NotAuthorized(res.t('guildQuestsNotSupported')); @@ -229,17 +232,11 @@ api.rejectQuest = { group.quest.members[user._id] = false; group.markModified('quest.members'); - user.party.quest = Group.cleanQuestProgress(); - user.markModified('party.quest'); - if (canStartQuestAutomatically(group)) { await group.startQuest(user); } - let [savedGroup] = await Bluebird.all([ - group.save(), - user.save(), - ]); + let savedGroup = await group.save(); res.respond(200, savedGroup.quest); @@ -261,7 +258,7 @@ api.rejectQuest = { * @apiName ForceQuestStart * @apiGroup Group * - * @apiParam {string} groupId The group _id (or 'party') + * @apiParam {String} groupId The group _id (or 'party') * * @apiSuccess {Object} data Quest Object */ @@ -313,7 +310,7 @@ api.forceStart = { * @apiName CancelQuest * @apiGroup Group * - * @apiParam {string} groupId The group _id (or 'party') + * @apiParam {String} groupId The group _id (or 'party') * * @apiSuccess {Object} data Quest Object */ @@ -362,7 +359,7 @@ api.cancelQuest = { * @apiName AbortQuest * @apiGroup Group * - * @apiParam {string} groupId The group _id (or 'party') + * @apiParam {String} groupId The group _id (or 'party') * * @apiSuccess {Object} data Quest Object */ @@ -415,7 +412,7 @@ api.abortQuest = { * @apiName LeaveQuest * @apiGroup Group * - * @apiParam {string} groupId The group _id (or 'party') + * @apiParam {String} groupId The group _id (or 'party') * * @apiSuccess {Object} data Quest Object */ diff --git a/website/server/controllers/api-v3/shops.js b/website/server/controllers/api-v3/shops.js new file mode 100644 index 0000000000..69bfa6deb8 --- /dev/null +++ b/website/server/controllers/api-v3/shops.js @@ -0,0 +1,123 @@ +import { authWithHeaders } from '../../middlewares/auth'; +import { shops } from '../../../../common/'; + +let api = {}; + +/** + * @apiIgnore + * @api {get} /api/v3/shops/market get the available items for the market + * @apiVersion 3.0.0 + * @apiName GetMarketItems + * @apiGroup Shops + * + * @apiSuccess {Object} data List of push devices + * @apiSuccess {string} message Success message + */ +api.getMarketItems = { + method: 'GET', + url: '/shops/market', + middlewares: [authWithHeaders()], + async handler (req, res) { + let user = res.locals.user; + + let resObject = { + identifier: 'market', + text: res.t('market'), + notes: res.t('welcomeMarketMobile'), + imageName: 'npc_alex', + categories: shops.getMarketCategories(user, req.language), + }; + + res.respond(200, resObject); + }, +}; + +/** + * @apiIgnore + * @api {get} /api/v3/shops/quests get the available items for the quests shop + * @apiVersion 3.0.0 + * @apiName GetQuestShopItems + * @apiGroup Shops + * + * @apiSuccess {Object} data List of push devices + * @apiSuccess {string} message Success message + */ +api.getQuestShopItems = { + method: 'GET', + url: '/shops/quests', + middlewares: [authWithHeaders()], + async handler (req, res) { + let user = res.locals.user; + + let resObject = { + identifier: 'questShop', + text: res.t('quests'), + notes: res.t('ianTextMobile'), + imageName: 'npc_ian', + categories: shops.getQuestShopCategories(user, req.language), + }; + + res.respond(200, resObject); + }, +}; + +/** + * @apiIgnore + * @api {get} /api/v3/shops/time-travelers get the available items for the time travelers shop + * @apiVersion 3.0.0 + * @apiName GetTimeTravelersShopItems + * @apiGroup Shops + * + * @apiSuccess {Object} data List of push devices + * @apiSuccess {string} message Success message + */ +api.getTimeTravelerShopItems = { + method: 'GET', + url: '/shops/time-travelers', + middlewares: [authWithHeaders()], + async handler (req, res) { + let user = res.locals.user; + let hasTrinkets = user.purchased.plan.consecutive.trinkets > 0; + + let resObject = { + identifier: 'timeTravelersShop', + text: res.t('timeTravelers'), + notes: hasTrinkets ? res.t('timeTravelersPopover') : res.t('timeTravelersPopoverNoSubMobile'), + imageName: hasTrinkets ? 'npc_timetravelers_active' : 'npc_timetravelers', + categories: shops.getTimeTravelersCategories(user, req.language), + }; + + res.respond(200, resObject); + }, +}; + +/** + * @apiIgnore + * @api {get} /api/v3/shops/seasonal get the available items for the seasonal shop + * @apiVersion 3.0.0 + * @apiName GetSeasonalShopItems + * @apiGroup Shops + * + * @apiSuccess {Object} data List of push devices + * @apiSuccess {string} message Success message + */ +api.getSeasonalShopItems = { + method: 'GET', + url: '/shops/seasonal', + middlewares: [authWithHeaders()], + async handler (req, res) { + let user = res.locals.user; + + let resObject = { + identifier: 'seasonalShop', + text: res.t('seasonalShop'), + notes: res.t('seasonalShopClosedText'), + imageName: 'seasonalshop_closed', + categories: shops.getSeasonalShopCategories(user, req.language), + }; + + res.respond(200, resObject); + }, +}; + +module.exports = api; diff --git a/website/server/controllers/api-v3/status.js b/website/server/controllers/api-v3/status.js index 68c232463f..dbd685bed2 100644 --- a/website/server/controllers/api-v3/status.js +++ b/website/server/controllers/api-v3/status.js @@ -6,7 +6,7 @@ let api = {}; * @apiName GetStatus * @apiGroup Status * - * @apiSuccess {status} data.status 'up' if everything is ok + * @apiSuccess {String} data.status 'up' if everything is ok */ api.getStatus = { method: 'GET', diff --git a/website/server/controllers/api-v3/tags.js b/website/server/controllers/api-v3/tags.js index 62e740a225..a7c2a6ae5e 100644 --- a/website/server/controllers/api-v3/tags.js +++ b/website/server/controllers/api-v3/tags.js @@ -1,11 +1,11 @@ -import { authWithHeaders } from '../../middlewares/api-v3/auth'; +import { authWithHeaders } from '../../middlewares/auth'; import { model as Tag } from '../../models/tag'; import * as Tasks from '../../models/task'; import { NotFound, -} from '../../libs/api-v3/errors'; +} from '../../libs/errors'; import _ from 'lodash'; -import { removeFromArray } from '../../libs/api-v3/collectionManipulators'; +import { removeFromArray } from '../../libs/collectionManipulators'; let api = {}; @@ -59,7 +59,7 @@ api.getTags = { * * @apiParam {UUID} tagId The tag _id * - * @apiSuccess {object} data The tag object + * @apiSuccess {Object} data The tag object */ api.getTag = { method: 'GET', @@ -87,7 +87,7 @@ api.getTag = { * * @apiParam {UUID} tagId The tag _id * - * @apiSuccess {object} data The updated tag + * @apiSuccess {Object} data The updated tag */ api.updateTag = { method: 'PUT', @@ -119,10 +119,10 @@ api.updateTag = { * @apiName ReorderTags * @apiGroup Tag * - * @apiParam {tagId} UUID Id of the tag to move - * @apiParam {to} number Position the tag is moving to + * @apiParam {UUID} tagId Id of the tag to move + * @apiParam {Number} to Position the tag is moving to * - * @apiSuccess {object} data An empty object + * @apiSuccess {Object} data An empty object */ api.reorderTags = { method: 'POST', @@ -156,7 +156,7 @@ api.reorderTags = { * * @apiParam {UUID} tagId The tag _id * - * @apiSuccess {object} data An empty object + * @apiSuccess {Object} data An empty object */ api.deleteTag = { method: 'DELETE', diff --git a/website/server/controllers/api-v3/tasks.js b/website/server/controllers/api-v3/tasks.js index b25a59afc4..23e2b98007 100644 --- a/website/server/controllers/api-v3/tasks.js +++ b/website/server/controllers/api-v3/tasks.js @@ -1,6 +1,6 @@ -import { authWithHeaders } from '../../middlewares/api-v3/auth'; -import { sendTaskWebhook } from '../../libs/api-v3/webhook'; -import { removeFromArray } from '../../libs/api-v3/collectionManipulators'; +import { authWithHeaders } from '../../middlewares/auth'; +import { sendTaskWebhook } from '../../libs/webhook'; +import { removeFromArray } from '../../libs/collectionManipulators'; import * as Tasks from '../../models/task'; import { model as Challenge } from '../../models/challenge'; import { model as Group } from '../../models/group'; @@ -8,11 +8,11 @@ import { NotFound, NotAuthorized, BadRequest, -} from '../../libs/api-v3/errors'; +} from '../../libs/errors'; import common from '../../../../common'; import Bluebird from 'bluebird'; import _ from 'lodash'; -import logger from '../../libs/api-v3/logger'; +import logger from '../../libs/logger'; let api = {}; @@ -259,9 +259,9 @@ api.getChallengeTasks = { * @apiName GetTask * @apiGroup Task * - * @apiParam {string} taskId The task _id or alias + * @apiParam {String} taskId The task _id or alias * - * @apiSuccess {object} data The task object + * @apiSuccess {Object} data The task object */ api.getTask = { method: 'GET', @@ -293,9 +293,9 @@ api.getTask = { * @apiName UpdateTask * @apiGroup Task * - * @apiParam {string} taskId The task _id or alias + * @apiParam {String} taskId The task _id or alias * - * @apiSuccess {object} data The updated task + * @apiSuccess {Object} data The updated task */ api.updateTask = { method: 'PUT', @@ -379,12 +379,12 @@ function _generateWebhookTaskData (task, direction, delta, stats, user) { * @apiName ScoreTask * @apiGroup Task * - * @apiParam {string} taskId The task _id or alias - * @apiParam {string="up","down"} direction The direction for scoring the task + * @apiParam {String} taskId The task _id or alias + * @apiParam {String="up","down"} direction The direction for scoring the task * - * @apiSuccess {object} data._tmp If an item was dropped it'll be returned in te _tmp object - * @apiSuccess {number} data.delta - * @apiSuccess {object} data The user stats + * @apiSuccess {Object} data._tmp If an item was dropped it'll be returned in te _tmp object + * @apiSuccess {Number} data.delta The delta + * @apiSuccess {Object} data The user stats */ api.scoreTask = { method: 'POST', @@ -462,10 +462,10 @@ api.scoreTask = { * @apiName MoveTask * @apiGroup Task * - * @apiParam {string} taskId The task _id or alias + * @apiParam {String} taskId The task _id or alias * @apiParam {Number} position Query parameter - Where to move the task (-1 means push to bottom). First position is 0 * - * @apiSuccess {array} data The new tasks order (user.tasksOrder.{task.type}s) + * @apiSuccess {Array} data The new tasks order (user.tasksOrder.{task.type}s) */ api.moveTask = { method: 'POST', @@ -515,9 +515,9 @@ api.moveTask = { * @apiName AddChecklistItem * @apiGroup Task * - * @apiParam {string} taskId The task _id or alias + * @apiParam {String} taskId The task _id or alias * - * @apiSuccess {object} data The updated task + * @apiSuccess {Object} data The updated task */ api.addChecklistItem = { method: 'POST', @@ -563,10 +563,10 @@ api.addChecklistItem = { * @apiName ScoreChecklistItem * @apiGroup Task * - * @apiParam {string} taskId The task _id or alias + * @apiParam {String} taskId The task _id or alias * @apiParam {UUID} itemId The checklist item _id * - * @apiSuccess {object} data The updated task + * @apiSuccess {Object} data The updated task */ api.scoreCheckListItem = { method: 'POST', @@ -603,10 +603,10 @@ api.scoreCheckListItem = { * @apiName UpdateChecklistItem * @apiGroup Task * - * @apiParam {string} taskId The task _id or alias + * @apiParam {String} taskId The task _id or alias * @apiParam {UUID} itemId The checklist item _id * - * @apiSuccess {object} data The updated task + * @apiSuccess {Object} data The updated task */ api.updateChecklistItem = { method: 'PUT', @@ -655,10 +655,10 @@ api.updateChecklistItem = { * @apiName RemoveChecklistItem * @apiGroup Task * - * @apiParam {string} taskId The task _id or alias + * @apiParam {String} taskId The task _id or alias * @apiParam {UUID} itemId The checklist item _id * - * @apiSuccess {object} data The updated task + * @apiSuccess {Object} data The updated task */ api.removeChecklistItem = { method: 'DELETE', @@ -705,10 +705,10 @@ api.removeChecklistItem = { * @apiName AddTagToTask * @apiGroup Task * - * @apiParam {string} taskId The task _id or alias + * @apiParam {String} taskId The task _id or alias * @apiParam {UUID} tagId The tag id * - * @apiSuccess {object} data The updated task + * @apiSuccess {Object} data The updated task */ api.addTagToTask = { method: 'POST', @@ -746,10 +746,10 @@ api.addTagToTask = { * @apiName RemoveTagFromTask * @apiGroup Task * - * @apiParam {string} taskId The task _id or alias + * @apiParam {String} taskId The task _id or alias * @apiParam {UUID} tagId The tag id * - * @apiSuccess {object} data The updated task + * @apiSuccess {Object} data The updated task */ api.removeTagFromTask = { method: 'DELETE', @@ -784,9 +784,9 @@ api.removeTagFromTask = { * @apiGroup Task * * @apiParam {UUID} challengeId The challenge _id - * @apiParam {string} keep Query parameter - keep-all or remove-all + * @apiParam {String} keep Query parameter - keep-all or remove-all * - * @apiSuccess {object} data An empty object + * @apiSuccess {Object} data An empty object */ api.unlinkAllTasks = { method: 'POST', @@ -845,10 +845,10 @@ api.unlinkAllTasks = { * @apiName UnlinkOneTask * @apiGroup Task * - * @apiParam {string} taskId The task _id or alias - * @apiParam {string} keep Query parameter - keep or remove + * @apiParam {String} taskId The task _id or alias + * @apiParam {String} keep Query parameter - keep or remove * - * @apiSuccess {object} data An empty object + * @apiSuccess {Object} data An empty object */ api.unlinkOneTask = { method: 'POST', @@ -893,7 +893,7 @@ api.unlinkOneTask = { * @apiName ClearCompletedTodos * @apiGroup Task * - * @apiSuccess {object} data An empty object + * @apiSuccess {Object} data An empty object */ api.clearCompletedTodos = { method: 'POST', @@ -924,9 +924,9 @@ api.clearCompletedTodos = { * @apiName DeleteTask * @apiGroup Task * - * @apiParam {string} taskId The task _id or alias + * @apiParam {String} taskId The task _id or alias * - * @apiSuccess {object} data An empty object + * @apiSuccess {Object} data An empty object */ api.deleteTask = { method: 'DELETE', diff --git a/website/server/controllers/api-v3/user.js b/website/server/controllers/api-v3/user.js index 8a6db2a01d..81a70b6d52 100644 --- a/website/server/controllers/api-v3/user.js +++ b/website/server/controllers/api-v3/user.js @@ -1,10 +1,10 @@ -import { authWithHeaders } from '../../middlewares/api-v3/auth'; +import { authWithHeaders } from '../../middlewares/auth'; import common from '../../../../common'; import { NotFound, BadRequest, NotAuthorized, -} from '../../libs/api-v3/errors'; +} from '../../libs/errors'; import * as Tasks from '../../models/task'; import { basicFields as basicGroupFields, @@ -13,7 +13,7 @@ import { import { model as User } from '../../models/user'; import Bluebird from 'bluebird'; import _ from 'lodash'; -import * as passwordUtils from '../../libs/api-v3/password'; +import * as passwordUtils from '../../libs/password'; let api = {}; @@ -30,19 +30,14 @@ api.getUser = { middlewares: [authWithHeaders()], url: '/user', async handler (req, res) { - let user = res.locals.user.toJSON(); + let user = res.locals.user; + let userToJSON = user.toJSON(); // Remove apiToken from response TODO make it private at the user level? returned in signup/login - delete user.apiToken; + delete userToJSON.apiToken; - // TODO move to model? (maybe virtuals, maybe in toJSON) - // NOTE: if an item is manually added to user.stats common/fns/predictableRandom must be tweaked - // so it's not considered. Otherwise the client will have it while the server won't and the results will be different. - user.stats.toNextLevel = common.tnl(user.stats.lvl); - user.stats.maxHealth = common.maxHealth; - user.stats.maxMP = common.statsComputed(user).maxMP; - - return res.respond(200, user); + user.addComputedStatsToJSONObj(userToJSON); + return res.respond(200, userToJSON); }, }; @@ -149,7 +144,7 @@ let checkPreferencePurchase = (user, path, item) => { * @apiName UserUpdate * @apiGroup User * - * @apiSuccess {object} data The updated user object + * @apiSuccess {Object} data The updated user object */ api.updateUser = { method: 'PUT', @@ -183,7 +178,7 @@ api.updateUser = { * @apiName UserDelete * @apiGroup User * - * @apiParam {string} password The user's password (unless it's a Facebook account) + * @apiParam {String} password The user's password (unless it's a Facebook account) * * @apiSuccess {Object} data An empty Object */ @@ -309,7 +304,7 @@ const partyMembersFields = 'profile.name stats achievements items.special'; * @apiName UserCast * @apiGroup User * - * @apiParam {string} spellId The skill to cast + * @apiParam {String} spellId The skill to cast * @apiParam {UUID} targetId Optional query parameter, the id of the target when casting a skill on a party member or a task * * @apiSuccess data Will return the modified targets. For party members only the necessary fields will be populated. The user is always returned. @@ -485,7 +480,7 @@ api.sleep = { * @apiName UserAllocate * @apiGroup User * - * @apiParam {string} stat Query parameter - Defaults to 'str', mast be one of be of str, con, int or per + * @apiParam {String} stat Query parameter - Defaults to 'str', mast be one of be of str, con, int or per * * @apiSuccess {Object} data user.stats */ @@ -529,7 +524,7 @@ api.allocateNow = { * @apiName UserBuy * @apiGroup User * - * @apiParam {string} key The item to buy + * @apiParam {String} key The item to buy */ api.buy = { method: 'POST', @@ -549,13 +544,13 @@ api.buy = { * @apiName UserBuyGear * @apiGroup User * - * @apiParam {string} key The item to buy + * @apiParam {String} key The item to buy * - * @apiSuccess {object} data.items user.items - * @apiSuccess {object} data.flags user.flags - * @apiSuccess {object} data.achievements user.achievements - * @apiSuccess {object} data.stats user.stats - * @apiSuccess {string} message Success message + * @apiSuccess {Object} data.items user.items + * @apiSuccess {Object} data.flags user.flags + * @apiSuccess {Object} data.achievements user.achievements + * @apiSuccess {Object} data.stats user.stats + * @apiSuccess {String} message Success message */ api.buyGear = { method: 'POST', @@ -575,10 +570,10 @@ api.buyGear = { * @apiName UserBuyArmoire * @apiGroup User * - * @apiSuccess {object} data.items user.items - * @apiSuccess {object} data.flags user.flags - * @apiSuccess {object} data.armoire Extra item given by the armoire - * @apiSuccess {string} message Success message + * @apiSuccess {Object} data.items user.items + * @apiSuccess {Object} data.flags user.flags + * @apiSuccess {Object} data.armoire Extra item given by the armoire + * @apiSuccess {String} message Success message */ api.buyArmoire = { method: 'POST', @@ -599,7 +594,7 @@ api.buyArmoire = { * @apiGroup User * * @apiSuccess {Object} data user.stats - * @apiSuccess {string} message Success message + * @apiSuccess {String} message Success message */ api.buyHealthPotion = { method: 'POST', @@ -619,11 +614,11 @@ api.buyHealthPotion = { * @apiName UserBuyMysterySet * @apiGroup User * - * @apiParam {string} key The mystery set to buy + * @apiParam {String} key The mystery set to buy * * @apiSuccess {Object} data.items user.items * @apiSuccess {Object} data.purchasedPlanConsecutive user.purchased.plan.consecutive - * @apiSuccess {string} message Success message + * @apiSuccess {String} message Success message */ api.buyMysterySet = { method: 'POST', @@ -643,10 +638,10 @@ api.buyMysterySet = { * @apiName UserBuyQuest * @apiGroup User * - * @apiParam {string} key The quest scroll to buy + * @apiParam {String} key The quest scroll to buy * * @apiSuccess {Object} data `user.items.quests` - * @apiSuccess {string} message Success message + * @apiSuccess {String} message Success message */ api.buyQuest = { method: 'POST', @@ -667,11 +662,11 @@ api.buyQuest = { * @apiName UserBuySpecialSpell * @apiGroup User * - * @apiParam {string} key The special item to buy. Must be one of the keys from "content.special", such as birthday, snowball, salt. + * @apiParam {String} key The special item to buy. Must be one of the keys from "content.special", such as birthday, snowball, salt. * * @apiSuccess {Object} data.stats user.stats * @apiSuccess {Object} data.items user.items - * @apiSuccess {string} message Success message + * @apiSuccess {String} message Success message */ api.buySpecialSpell = { method: 'POST', @@ -691,11 +686,11 @@ api.buySpecialSpell = { * @apiName UserHatch * @apiGroup User * - * @apiParam {string} egg The egg to use - * @apiParam {string} hatchingPotion The hatching potion to use + * @apiParam {String} egg The egg to use + * @apiParam {String} hatchingPotion The hatching potion to use * * @apiSuccess {Object} data user.items - * @apiSuccess {string} message + * @apiSuccess {String} message */ api.hatch = { method: 'POST', @@ -715,11 +710,11 @@ api.hatch = { * @apiName UserEquip * @apiGroup User * - * @apiParam {string} type The type of item to equip (mount, pet, costume or equipped) - * @apiParam {string} key The item to equip + * @apiParam {String} type The type of item to equip (mount, pet, costume or equipped) + * @apiParam {String} key The item to equip * * @apiSuccess {Object} data user.items - * @apiSuccess {string} message Optional success message + * @apiSuccess {String} message Optional success message */ api.equip = { method: 'POST', @@ -739,11 +734,11 @@ api.equip = { * @apiName UserFeed * @apiGroup User * - * @apiParam {string} pet - * @apiParam {string} food + * @apiParam {String} pet + * @apiParam {String} food * - * @apiSuccess {number} data The pet value - * @apiSuccess {string} message Success message + * @apiSuccess {Number} data The pet value + * @apiSuccess {String} message Success message */ api.feed = { method: 'POST', @@ -764,12 +759,12 @@ api.feed = { * @apiName UserChangeClass * @apiGroup User * -* @apiParam {string} class Query parameter - ?class={warrior|rogue|wizard|healer} +* @apiParam {String} class Query parameter - ?class={warrior|rogue|wizard|healer} * -* @apiSuccess {object} data.flags user.flags -* @apiSuccess {object} data.stats user.stats -* @apiSuccess {object} data.preferences user.preferences -* @apiSuccess {object} data.items user.items +* @apiSuccess {Object} data.flags user.flags +* @apiSuccess {Object} data.stats user.stats +* @apiSuccess {Object} data.preferences user.preferences +* @apiSuccess {Object} data.items user.items */ api.changeClass = { method: 'POST', @@ -789,9 +784,9 @@ api.changeClass = { * @apiName UserDisableClasses * @apiGroup User * -* @apiSuccess {object} data.flags user.flags -* @apiSuccess {object} data.stats user.stats -* @apiSuccess {object} data.preferences user.preferences +* @apiSuccess {Object} data.flags user.flags +* @apiSuccess {Object} data.stats user.stats +* @apiSuccess {Object} data.preferences user.preferences */ api.disableClasses = { method: 'POST', @@ -811,12 +806,12 @@ api.disableClasses = { * @apiName UserPurchase * @apiGroup User * -* @apiParam {string} type Type of item to purchase. Must be one of: gems, eggs, hatchingPotions, food, quests, or gear -* @apiParam {string} key Item's key (use "gem" for purchasing gems) +* @apiParam {String} type Type of item to purchase. Must be one of: gems, eggs, hatchingPotions, food, quests, or gear +* @apiParam {String} key Item's key (use "gem" for purchasing gems) * -* @apiSuccess {object} data.items user.items -* @apiSuccess {number} data.balance user.balance -* @apiSuccess {string} message Success message +* @apiSuccess {Object} data.items user.items +* @apiSuccess {Number} data.balance user.balance +* @apiSuccess {String} message Success message */ api.purchase = { method: 'POST', @@ -836,12 +831,12 @@ api.purchase = { * @apiName UserPurchaseHourglass * @apiGroup User * -* @apiParam {string} type The type of item to purchase (pets or mounts) -* @apiParam {string} key Ex: {MantisShrimp-Base}. The key for the mount/pet +* @apiParam {String} type The type of item to purchase (pets or mounts) +* @apiParam {String} key Ex: {MantisShrimp-Base}. The key for the mount/pet * -* @apiSuccess {object} data.items user.items -* @apiSuccess {object} data.purchasedPlanConsecutive user.purchased.plan.consecutive -* @apiSuccess {string} message Success message +* @apiSuccess {Object} data.items user.items +* @apiSuccess {Object} data.purchasedPlanConsecutive user.purchased.plan.consecutive +* @apiSuccess {String} message Success message */ api.userPurchaseHourglass = { method: 'POST', @@ -861,11 +856,11 @@ api.userPurchaseHourglass = { * @apiName UserReadCard * @apiGroup User * -* @apiParam {string} cardType Type of card to read +* @apiParam {String} cardType Type of card to read * -* @apiSuccess {object} data.specialItems user.items.special -* @apiSuccess {boolean} data.cardReceived user.flags.cardReceived -* @apiSuccess {string} message Success message +* @apiSuccess {Object} data.specialItems user.items.special +* @apiSuccess {Boolean} data.cardReceived user.flags.cardReceived +* @apiSuccess {String} message Success message */ api.readCard = { method: 'POST', @@ -886,7 +881,7 @@ api.readCard = { * @apiGroup User * * @apiSuccess {Object} data The item obtained -* @apiSuccess {string} message Success message +* @apiSuccess {String} message Success message */ api.userOpenMysteryItem = { method: 'POST', @@ -906,8 +901,8 @@ api.userOpenMysteryItem = { * @apiName UserAddWebhook * @apiGroup User * -* @apiParam {string} url Body parameter - The webhook's URL -* @apiParam {boolean} enabled Body parameter - If the webhook should be enabled +* @apiParam {String} url Body parameter - The webhook's URL +* @apiParam {Boolean} enabled Body parameter - If the webhook should be enabled * * @apiSuccess {Object} data The created webhook */ @@ -930,8 +925,8 @@ api.addWebhook = { * @apiGroup User * * @apiParam {UUID} id The id of the webhook to update -* @apiParam {string} url Body parameter - The webhook's URL -* @apiParam {boolean} enabled Body parameter - If the webhook should be enabled +* @apiParam {String} url Body parameter - The webhook's URL +* @apiParam {Boolean} enabled Body parameter - If the webhook should be enabled * * @apiSuccess {Object} data The updated webhook */ @@ -976,7 +971,7 @@ api.deleteWebhook = { * @apiGroup User * * @apiSuccess {Object} data.items `user.items.pets` -* @apiSuccess {string} message Success message +* @apiSuccess {String} message Success message */ api.userReleasePets = { method: 'POST', @@ -998,8 +993,8 @@ api.userReleasePets = { * @apiSuccess {Object} data.achievements * @apiSuccess {Object} data.items -* @apiSuccess {number} data.balance -* @apiSuccess {string} message Success message +* @apiSuccess {Number} data.balance +* @apiSuccess {String} message Success message */ api.userReleaseBoth = { method: 'POST', @@ -1020,7 +1015,7 @@ api.userReleaseBoth = { * @apiGroup User * * @apiSuccess {Object} data user.items.mounts -* @apiSuccess {string} message Success message +* @apiSuccess {String} message Success message */ api.userReleaseMounts = { method: 'POST', @@ -1040,12 +1035,12 @@ api.userReleaseMounts = { * @apiName UserSell * @apiGroup User * -* @apiParam {string} type The type of item to sell. Must be one of: eggs, hatchingPotions, or food -* @apiParam {string} key The key of the item +* @apiParam {String} type The type of item to sell. Must be one of: eggs, hatchingPotions, or food +* @apiParam {String} key The key of the item * * @apiSuccess {Object} data.stats * @apiSuccess {Object} data.items -* @apiSuccess {string} message Success message +* @apiSuccess {String} message Success message */ api.userSell = { method: 'POST', @@ -1065,12 +1060,12 @@ api.userSell = { * @apiName UserUnlock * @apiGroup User * -* @apiParam {string} path Query parameter. The path to unlock +* @apiParam {String} path Query parameter. The path to unlock * * @apiSuccess {Object} data.purchased * @apiSuccess {Object} data.items * @apiSuccess {Object} data.preferences -* @apiSuccess {string} message +* @apiSuccess {String} message */ api.userUnlock = { method: 'POST', @@ -1091,7 +1086,7 @@ api.userUnlock = { * @apiGroup User * * @apiSuccess {Object} data user.items -* @apiSuccess {string} message Success message +* @apiSuccess {String} message Success message */ api.userRevive = { method: 'POST', @@ -1112,8 +1107,8 @@ api.userRevive = { * @apiGroup User * * @apiSuccess {Object} data.user -* @apiSuccess {array} data.tasks User's modified tasks (no rewards) -* @apiSuccess {string} message Success message +* @apiSuccess {Array} data.tasks User's modified tasks (no rewards) +* @apiSuccess {String} message Success message */ api.userRebirth = { method: 'POST', @@ -1151,7 +1146,7 @@ api.userRebirth = { * * @apiParam {UUID} uuid The uuid of the user to block / unblock * - * @apiSuccess {array} data user.inbox.blocks + * @apiSuccess {Array} data user.inbox.blocks **/ api.blockUser = { method: 'POST', @@ -1173,7 +1168,7 @@ api.blockUser = { * * @apiParam {UUID} id The id of the message to delete * - * @apiSuccess {object} data user.inbox.messages + * @apiSuccess {Object} data user.inbox.messages **/ api.deleteMessage = { method: 'DELETE', @@ -1193,7 +1188,7 @@ api.deleteMessage = { * @apiName clearMessages * @apiGroup User * - * @apiSuccess {object} data user.inbox.messages + * @apiSuccess {Object} data user.inbox.messages **/ api.clearMessages = { method: 'DELETE', @@ -1213,7 +1208,7 @@ api.clearMessages = { * @apiName markPmsRead * @apiGroup User * - * @apiSuccess {object} data user.inbox.messages + * @apiSuccess {Object} data user.inbox.messages **/ api.markPmsRead = { method: 'POST', @@ -1271,7 +1266,7 @@ api.userReroll = { * * @apiSuccess {Object} data.user * @apiSuccess {Object} data.tasksToRemove IDs of removed tasks -* @apiSuccess {string} message Success message +* @apiSuccess {String} message Success message */ api.userReset = { method: 'POST', diff --git a/website/server/controllers/top-level/dataexport.js b/website/server/controllers/top-level/dataexport.js index 1135c1ce6d..c042198a11 100644 --- a/website/server/controllers/top-level/dataexport.js +++ b/website/server/controllers/top-level/dataexport.js @@ -1,21 +1,21 @@ -import { authWithSession } from '../../middlewares/api-v3/auth'; +import { authWithSession } from '../../middlewares/auth'; import { model as User } from '../../models/user'; import * as Tasks from '../../models/task'; import { NotFound, -} from '../../libs/api-v3/errors'; +} from '../../libs/errors'; import _ from 'lodash'; -import csvStringify from '../../libs/api-v3/csvStringify'; +import csvStringify from '../../libs/csvStringify'; import moment from 'moment'; import js2xml from 'js2xmlparser'; import Pageres from 'pageres'; import nconf from 'nconf'; import got from 'got'; import Bluebird from 'bluebird'; -import locals from '../../middlewares/api-v3/locals'; +import locals from '../../middlewares/locals'; import { S3, -} from '../../libs/api-v3/aws'; +} from '../../libs/aws'; const S3_BUCKET = nconf.get('S3:bucket'); @@ -25,12 +25,12 @@ let api = {}; /** * @api {get} /export/history.csv Export user tasks history in CSV format - * @apiDescription History is only available for habits and dailys so todos and rewards won't be included. NOTE: Part of the private API that may change at any time. + * @apiDescription History is only available for habits and dailies so todos and rewards won't be included. NOTE: Part of the private API that may change at any time. * @apiVersion 3.0.0 * @apiName ExportUserHistory * @apiGroup DataExport * - * @apiSuccess {string} A cvs file + * @apiSuccess {String} A csv file */ api.exportUserHistory = { method: 'GET', @@ -98,7 +98,7 @@ async function _getUserDataForExport (user) { * @apiGroup DataExport * @apiDescription NOTE: Part of the private API that may change at any time. * - * @apiSuccess {string} A json file + * @apiSuccess {String} A json file */ api.exportUserDataJson = { method: 'GET', @@ -124,7 +124,7 @@ api.exportUserDataJson = { * @apiGroup DataExport * @apiDescription NOTE: Part of the private API that may change at any time. * - * @apiSuccess {string} A xml file + * @apiSuccess {String} A xml file */ api.exportUserDataXml = { method: 'GET', @@ -148,7 +148,7 @@ api.exportUserDataXml = { * @apiGroup DataExport * @apiDescription NOTE: Part of the private API that may change at any time. * - * @apiSuccess {string} An html page + * @apiSuccess {String} An html page */ api.exportUserAvatarHtml = { method: 'GET', @@ -181,7 +181,7 @@ api.exportUserAvatarHtml = { * @apiGroup DataExport * @apiDescription NOTE: Part of the private API that may change at any time. * - * @apiSuccess {string} A png file + * @apiSuccess {String} A png file */ api.exportUserAvatarPng = { method: 'GET', diff --git a/website/server/controllers/top-level/email.js b/website/server/controllers/top-level/email.js index b84f54c6e1..7a0d08212f 100644 --- a/website/server/controllers/top-level/email.js +++ b/website/server/controllers/top-level/email.js @@ -1,9 +1,9 @@ import { model as User } from '../../models/user'; import { model as EmailUnsubscription } from '../../models/emailUnsubscription'; -import { decrypt } from '../../libs/api-v3/encryption'; +import { decrypt } from '../../libs/encryption'; import { NotFound, -} from '../../libs/api-v3/errors'; +} from '../../libs/errors'; let api = {}; diff --git a/website/server/controllers/top-level/pages.js b/website/server/controllers/top-level/pages.js index 67e8381701..8c1f9aff2e 100644 --- a/website/server/controllers/top-level/pages.js +++ b/website/server/controllers/top-level/pages.js @@ -1,4 +1,4 @@ -import locals from '../../middlewares/api-v3/locals'; +import locals from '../../middlewares/locals'; import _ from 'lodash'; import markdownIt from 'markdown-it'; @@ -8,7 +8,7 @@ const md = markdownIt({ let api = {}; -const TOTAL_USER_COUNT = '1,100,000'; +const TOTAL_USER_COUNT = '1,500,000'; const LOADING_SCREEN_TIPS = 32; api.getFrontPage = { @@ -29,7 +29,7 @@ api.getFrontPage = { }, }; -let staticPages = ['front', 'privacy', 'terms', 'api-v2', 'features', +let staticPages = ['front', 'privacy', 'terms', 'features', 'videos', 'contact', 'plans', 'new-stuff', 'community-guidelines', 'old-news', 'press-kit', 'faq', 'overview', 'apps', 'clear-browser-data', 'merch', 'maintenance-info']; diff --git a/website/server/controllers/top-level/payments/amazon.js b/website/server/controllers/top-level/payments/amazon.js index 1a28381759..413fdc8e5c 100644 --- a/website/server/controllers/top-level/payments/amazon.js +++ b/website/server/controllers/top-level/payments/amazon.js @@ -1,14 +1,14 @@ import { BadRequest, NotAuthorized, -} from '../../../libs/api-v3/errors'; -import amzLib from '../../../libs/api-v3/amazonPayments'; +} from '../../../libs/errors'; +import amzLib from '../../../libs/amazonPayments'; import { authWithHeaders, authWithUrl, -} from '../../../middlewares/api-v3/auth'; +} from '../../../middlewares/auth'; import shared from '../../../../../common'; -import payments from '../../../libs/api-v3/payments'; +import payments from '../../../libs/payments'; import moment from 'moment'; import { model as Coupon } from '../../../models/coupon'; import { model as User } from '../../../models/user'; @@ -46,7 +46,7 @@ api.verifyAccessToken = { * @apiName AmazonCreateOrderReferenceId * @apiGroup Payments * - * @apiSuccess {string} data.orderReferenceId The order reference id. + * @apiSuccess {String} data.orderReferenceId The order reference id. **/ api.createOrderReferenceId = { method: 'POST', @@ -76,7 +76,7 @@ api.createOrderReferenceId = { * @apiName AmazonCheckout * @apiGroup Payments * - * @apiSuccess {object} data Empty object + * @apiSuccess {Object} data Empty object **/ api.checkout = { method: 'POST', @@ -153,7 +153,7 @@ api.checkout = { * @apiName AmazonSubscribe * @apiGroup Payments * - * @apiSuccess {object} data Empty object + * @apiSuccess {Object} data Empty object **/ api.subscribe = { method: 'POST', diff --git a/website/server/controllers/top-level/payments/iap.js b/website/server/controllers/top-level/payments/iap.js index d894aaacf9..ee013e9e2e 100644 --- a/website/server/controllers/top-level/payments/iap.js +++ b/website/server/controllers/top-level/payments/iap.js @@ -1,14 +1,14 @@ import { authWithHeaders, authWithUrl, -} from '../../../middlewares/api-v3/auth'; -import iap from '../../../libs/api-v3/inAppPurchases'; -import payments from '../../../libs/api-v3/payments'; +} from '../../../middlewares/auth'; +import iap from '../../../libs/inAppPurchases'; +import payments from '../../../libs/payments'; import { NotAuthorized, -} from '../../../libs/api-v3/errors'; +} from '../../../libs/errors'; import { model as IapPurchaseReceipt } from '../../../models/iapPurchaseReceipt'; -import logger from '../../../libs/api-v3/logger'; +import logger from '../../../libs/logger'; let api = {}; diff --git a/website/server/controllers/top-level/payments/paypal.js b/website/server/controllers/top-level/payments/paypal.js index 0bc7b45ef3..c20260b1ea 100644 --- a/website/server/controllers/top-level/payments/paypal.js +++ b/website/server/controllers/top-level/payments/paypal.js @@ -3,7 +3,7 @@ import nconf from 'nconf'; import moment from 'moment'; import _ from 'lodash'; -import payments from '../../../libs/api-v3/payments'; +import payments from '../../../libs/payments'; import ipn from 'paypal-ipn'; import paypal from 'paypal-rest-sdk'; import shared from '../../../../../common'; @@ -14,11 +14,11 @@ import { model as User } from '../../../models/user'; import { authWithUrl, authWithSession, -} from '../../../middlewares/api-v3/auth'; +} from '../../../middlewares/auth'; import { BadRequest, NotAuthorized, -} from '../../../libs/api-v3/errors'; +} from '../../../libs/errors'; const BASE_URL = nconf.get('BASE_URL'); diff --git a/website/server/controllers/top-level/payments/stripe.js b/website/server/controllers/top-level/payments/stripe.js index ea6d665613..eb2c27f1e0 100644 --- a/website/server/controllers/top-level/payments/stripe.js +++ b/website/server/controllers/top-level/payments/stripe.js @@ -3,16 +3,16 @@ import shared from '../../../../../common'; import { BadRequest, NotAuthorized, -} from '../../../libs/api-v3/errors'; +} from '../../../libs/errors'; import { model as Coupon } from '../../../models/coupon'; -import payments from '../../../libs/api-v3/payments'; +import payments from '../../../libs/payments'; import nconf from 'nconf'; import { model as User } from '../../../models/user'; import cc from 'coupon-code'; import { authWithHeaders, authWithUrl, -} from '../../../middlewares/api-v3/auth'; +} from '../../../middlewares/auth'; const stripe = stripeModule(nconf.get('STRIPE_API_KEY')); @@ -25,11 +25,11 @@ let api = {}; * @apiName StripeCheckout * @apiGroup Payments * - * @apiParam {string} id Body parameter - The token - * @apiParam {string} email Body parameter - the customer email - * @apiParam {string} gift Query parameter - stringified json object, gift - * @apiParam {string} sub Query parameter - subscription, possible values are: basic_earned, basic_3mo, basic_6mo, google_6mo, basic_12mo - * @apiParam {string} coupon Query parameter - coupon for the matching subscription, required only for certain subscriptions + * @apiParam {String} id Body parameter - The token + * @apiParam {String} email Body parameter - the customer email + * @apiParam {String} gift Query parameter - stringified json object, gift + * @apiParam {String} sub Query parameter - subscription, possible values are: basic_earned, basic_3mo, basic_6mo, google_6mo, basic_12mo + * @apiParam {String} coupon Query parameter - coupon for the matching subscription, required only for certain subscriptions * * @apiSuccess {Object} data Empty object **/ @@ -115,7 +115,7 @@ api.checkout = { * @apiName StripeSubscribeEdit * @apiGroup Payments * - * @apiParam {string} id Body parameter - The token + * @apiParam {String} id Body parameter - The token * * @apiSuccess {Object} data Empty object **/ diff --git a/website/server/index.js b/website/server/index.js index ec8e882c99..e41be424a6 100644 --- a/website/server/index.js +++ b/website/server/index.js @@ -14,13 +14,13 @@ require('babel-polyfill'); global.Promise = require('bluebird'); // Initialize configuration BEFORE anything -const setupNconf = require('./libs/api-v3/setupNconf'); +const setupNconf = require('./libs/setupNconf'); setupNconf(); const nconf = require('nconf'); const cluster = require('cluster'); -const logger = require('./libs/api-v3/logger'); +const logger = require('./libs/logger'); const IS_PROD = nconf.get('IS_PROD'); const IS_DEV = nconf.get('IS_DEV'); diff --git a/website/server/libs/api-v3/amazonPayments.js b/website/server/libs/amazonPayments.js similarity index 98% rename from website/server/libs/api-v3/amazonPayments.js rename to website/server/libs/amazonPayments.js index 4d3a3756b8..bcf19417a5 100644 --- a/website/server/libs/api-v3/amazonPayments.js +++ b/website/server/libs/amazonPayments.js @@ -1,6 +1,6 @@ import amazonPayments from 'amazon-payments'; import nconf from 'nconf'; -import common from '../../../../common'; +import common from '../../../common'; import Bluebird from 'bluebird'; import { BadRequest, diff --git a/website/server/libs/api-v3/analyticsService.js b/website/server/libs/analyticsService.js similarity index 98% rename from website/server/libs/api-v3/analyticsService.js rename to website/server/libs/analyticsService.js index f4ab6e6286..664194c916 100644 --- a/website/server/libs/api-v3/analyticsService.js +++ b/website/server/libs/analyticsService.js @@ -7,7 +7,7 @@ import { each, omit, } from 'lodash'; -import { content as Content } from '../../../../common'; +import { content as Content } from '../../../common'; const AMPLIUDE_TOKEN = nconf.get('AMPLITUDE_KEY'); const GA_TOKEN = nconf.get('GA_ID'); diff --git a/website/server/libs/api-v2/analytics.js b/website/server/libs/api-v2/analytics.js deleted file mode 100644 index 6c1ccd3020..0000000000 --- a/website/server/libs/api-v2/analytics.js +++ /dev/null @@ -1,205 +0,0 @@ -require('./i18n'); - -var _ = require('lodash'); -var Content = require('../../../../common').content; -var Amplitude = require('amplitude'); -var googleAnalytics = require('universal-analytics'); - -var ga; -var amplitude; - -var analytics = { - trackPurchase: trackPurchase, - track: track -} - -function init(options) { - if(!options) { throw 'No options provided' } - - amplitude = new Amplitude(options.amplitudeToken); - ga = googleAnalytics(options.googleAnalytics); - - return analytics; -} - -function track(eventType, data) { - _sendDataToAmplitude(eventType, data); - _sendDataToGoogle(eventType, data); -} - -function _sendDataToAmplitude(eventType, data) { - var amplitudeData = _formatDataForAmplitude(data); - amplitudeData.event_type = eventType; - amplitude.track(amplitudeData).catch(function(error) { - // @TODO log error with new relic - }); -} - -function _sendDataToGoogle(eventType, data) { - var eventData = { - ec: data.category, - ea: eventType - } - - var label = _generateLabelForGoogleAnalytics(data); - if(label) { eventData.el = label; } - - var value = _generateValueForGoogleAnalytics(data); - if(value) { eventData.ev = value; } - - ga.event(eventData).send(); -} - -function _generateLabelForGoogleAnalytics(data) { - var label; - var POSSIBLE_LABELS = ['gaLabel', 'itemKey']; - - _(POSSIBLE_LABELS).each(function(key) { - if(data[key]) { - label = data[key]; - return false; // exit _.each early - } - }).value(); - - return label; -} - -function _generateValueForGoogleAnalytics(data) { - var value; - var POSSIBLE_VALUES = ['gaValue', 'gemCost', 'goldCost']; - - _(POSSIBLE_VALUES).each(function(key) { - if(data[key]) { - value = data[key]; - return false; // exit _.each early - } - }).value(); - - return value; -} - -function trackPurchase(data) { - _sendPurchaseDataToAmplitude(data); - _sendPurchaseDataToGoogle(data); -} - -function _sendPurchaseDataToAmplitude(data) { - var amplitudeData = _formatDataForAmplitude(data); - amplitudeData.event_type = 'purchase'; - amplitudeData.revenue = data.purchaseValue; - - amplitude.track(amplitudeData).catch(function(error) { - // @TODO log error with new relic - }); -} - -function _formatDataForAmplitude(data) { - var PROPERTIES_TO_SCRUB = ['uuid', 'user', 'purchaseValue', 'gaLabel', 'gaValue']; - var event_properties = _.omit(data, PROPERTIES_TO_SCRUB); - - var ampData = { - user_id: data.uuid || 'no-user-id-was-provided', - platform: 'server', - event_properties: event_properties - } - - if(data.user) { - ampData.user_properties = _formatUserData(data.user); - } - - var itemName = _lookUpItemName(data.itemKey); - if(itemName) { - event_properties.itemName = itemName; - } - - return ampData; -} - -function _lookUpItemName(itemKey) { - if (!itemKey) return; - - var gear = Content.gear.flat[itemKey]; - var egg = Content.eggs[itemKey]; - var food = Content.food[itemKey]; - var hatchingPotion = Content.hatchingPotions[itemKey]; - var quest = Content.quests[itemKey]; - var spell = Content.special[itemKey]; - - var itemName; - - if (gear) { - itemName = gear.text(); - } else if (egg) { - itemName = egg.text() + ' Egg'; - } else if (food) { - itemName = food.text(); - } else if (hatchingPotion) { - itemName = hatchingPotion.text() + " Hatching Potion"; - } else if (quest) { - itemName = quest.text(); - } else if (spell) { - itemName = spell.text(); - } - - return itemName; -} - -function _formatUserData(user) { - var properties = {}; - - if (user.stats) { - properties.Class = user.stats.class; - properties.Experience = Math.floor(user.stats.exp); - properties.Gold = Math.floor(user.stats.gp); - properties.Health = Math.ceil(user.stats.hp); - properties.Level = user.stats.lvl; - properties.Mana = Math.floor(user.stats.mp); - } - - properties.tutorialComplete = user.flags && user.flags.tour && user.flags.tour.intro === -2; - - if (user.habits && user.dailys && user.todos && user.rewards) { - properties["Number Of Tasks"] = { - habits: user.habits.length, - dailys: user.dailys.length, - todos: user.todos.length, - rewards: user.rewards.length - }; - } - - if (user.contributor && user.contributor.level) { - properties.contributorLevel = user.contributor.level; - } - - if (user.purchased && user.purchased.plan.planId) { - properties.subscription = user.purchased.plan.planId; - } - - return properties; -} - -function _sendPurchaseDataToGoogle(data) { - var label = data.paymentMethod; - var type = data.purchaseType; - var price = data.purchaseValue; - var qty = data.quantity; - var sku = data.sku; - var itemKey = data.itemPurchased; - var variation = type; - if(data.gift) variation += ' - Gift'; - - var eventData = { - ec: 'commerce', - ea: type, - el: label, - ev: price - }; - - ga.event(eventData).send(); - - ga.transaction(data.uuid, price) - .item(price, qty, sku, itemKey, variation) - .send(); -} - -module.exports = init; diff --git a/website/server/libs/api-v2/buildManifest.js b/website/server/libs/api-v2/buildManifest.js deleted file mode 100644 index bfbab1421a..0000000000 --- a/website/server/libs/api-v2/buildManifest.js +++ /dev/null @@ -1,59 +0,0 @@ -var fs = require('fs'); -var path = require('path'); -var nconf = require('nconf'); -var _ = require('lodash'); -var manifestFiles = require("../../../client/manifest.json"); - -var IS_PROD = nconf.get('NODE_ENV') === 'production'; -var buildFiles = []; - -var walk = function(folder){ - var res = fs.readdirSync(folder); - - res.forEach(function(fileName){ - var file = folder + '/' + fileName; - if(fs.statSync(file).isDirectory()){ - walk(file); - }else{ - var relFolder = path.relative(path.join(__dirname, "/../../../build"), folder); - var old = fileName.replace(/-.{8}(\.[\d\w]+)$/, '$1'); - - if(relFolder){ - old = relFolder + '/' + old; - fileName = relFolder + '/' + fileName; - } - - buildFiles[old] = fileName; - } - }); -}; - -walk(path.join(__dirname, "/../../../build")); - -var getBuildUrl = module.exports.getBuildUrl = function(url){ - if(buildFiles[url]) return '/' + buildFiles[url]; - - return '/' + url; -}; - -module.exports.getManifestFiles = function(page){ - var files = manifestFiles[page]; - - if(!files) throw new Error("Page not found!"); - - var code = ''; - - if(IS_PROD){ - code += ''; - code += ''; - }else{ - _.each(files.css, function(file){ - code += ''; - }); - _.each(files.js, function(file){ - code += ''; - }); - } - - return code; -}; diff --git a/website/server/libs/api-v2/i18n.js b/website/server/libs/api-v2/i18n.js deleted file mode 100644 index e8295deb03..0000000000 --- a/website/server/libs/api-v2/i18n.js +++ /dev/null @@ -1,180 +0,0 @@ -var fs = require('fs'), - path = require('path'), - _ = require('lodash'), - User = require('../../models/user').model, - accepts = require('accepts'), - shared = require('../../../../common'), - translations = {}; - -var localePath = path.join(__dirname, "/../../../../common/locales/") - -var loadTranslations = function(locale){ - var files = fs.readdirSync(path.join(localePath, locale)); - translations[locale] = {}; - _.each(files, function(file){ - if(path.extname(file) !== '.json') return; - _.merge(translations[locale], require(path.join(localePath, locale, file))); - }); -}; - -// First fetch english so we can merge with missing strings in other languages -loadTranslations('en'); - -fs.readdirSync(localePath).forEach(function(file) { - if(file === 'en' || fs.statSync(path.join(localePath, file)).isDirectory() === false) return; - loadTranslations(file); - // Merge missing strings from english - _.defaults(translations[file], translations.en); -}); - -var langCodes = Object.keys(translations); - -var avalaibleLanguages = _.map(langCodes, function(langCode){ - return { - code: langCode, - name: translations[langCode].languageName - } -}); - -// Load MomentJS localization files -var momentLangs = {}; - -// Handle different language codes from MomentJS and /locales -var momentLangsMapping = { - 'en': 'en-gb', - 'en_GB': 'en-gb', - 'no': 'nn', - 'zh': 'zh-cn', - 'es_419': 'es' -}; - -var momentLangs = {}; - -_.each(langCodes, function(code){ - var lang = _.find(avalaibleLanguages, {code: code}); - lang.momentLangCode = (momentLangsMapping[code] || code); - try{ - // MomentJS lang files are JS files that has to be executed in the browser so we load them as plain text files - var f = fs.readFileSync(path.join(__dirname, '/../../node_modules/moment/locale/' + lang.momentLangCode + '.js'), 'utf8'); - momentLangs[code] = f; - }catch (e){} -}); - -// Remove en_GB from langCodes checked by browser to avaoi it being -// used in place of plain original 'en' -var defaultLangCodes = _.without(langCodes, 'en_GB'); - -// A list of languages that have different versions -var multipleVersionsLanguages = ['es', 'zh']; - -var latinAmericanSpanishes = { - 'es-419': 'es_419', - 'es-mx': 'es_419', - 'es-gt': 'es_419', - 'es-cr': 'es_419', - 'es-pa': 'es_419', - 'es-do': 'es_419', - 'es-ve': 'es_419', - 'es-co': 'es_419', - 'es-pe': 'es_419', - 'es-ar': 'es_419', - 'es-ec': 'es_419', - 'es-cl': 'es_419', - 'es-uy': 'es_419', - 'es-py': 'es_419', - 'es-bo': 'es_419', - 'es-sv': 'es_419', - 'es-hn': 'es_419', - 'es-ni': 'es_419', - 'es-pr': 'es_419', -}; - -var chineseVersions = { - 'zh-tw': 'zh_TW', -}; - -var getUserLanguage = function(req, res, next){ - var getFromBrowser = function(){ - var acceptedLanguages = accepts(req).languages(); - - var acceptable = _(acceptedLanguages).map(function(lang){ - return lang.slice(0, 2); - }).uniq().value(); - - var matches = _.intersection(acceptable, defaultLangCodes); - - var iAcceptedCompleteLang = (matches.length > 0) ? multipleVersionsLanguages.indexOf(matches[0].toLowerCase()) : -1; - - if(iAcceptedCompleteLang !== -1){ - var acceptedCompleteLang = _.find(acceptedLanguages, function(accepted){ - return accepted.slice(0, 2) == multipleVersionsLanguages[iAcceptedCompleteLang]; - }); - - if(acceptedCompleteLang){ - acceptedCompleteLang = acceptedCompleteLang.toLowerCase(); - }else{ - return 'en'; - } - - if(matches[0] === 'es'){ - return latinAmericanSpanishes[acceptedCompleteLang] || 'es'; - }else if(matches[0] === 'zh'){ - return chineseVersions[acceptedCompleteLang] || 'zh'; - }else{ - return en; - } - - }else if(matches.length > 0){ - return matches[0].toLowerCase(); - }else{ - return 'en'; - } - }; - - var getFromUser = function(user){ - var lang; - if(user && user.preferences.language && translations[user.preferences.language]){ - lang = user.preferences.language; - }else{ - var preferred = getFromBrowser(); - lang = translations[preferred] ? preferred : 'en'; - } - req.language = lang; - next(); - }; - - if(req.query.lang){ - req.language = translations[req.query.lang] ? (req.query.lang) : 'en'; - next(); - }else if(req.locals && req.locals.user){ - getFromUser(req.locals.user); - }else if(req.session && req.session.userId){ - User.findOne({_id: req.session.userId}, 'preferences.language', function(err, user){ - if(err) return next(err); - getFromUser(user); - }); - }else{ - getFromUser(null); - } -}; - -shared.i18n.translations = translations; - -module.exports = { - translations: translations, - avalaibleLanguages: avalaibleLanguages, - langCodes: langCodes, - getUserLanguage: getUserLanguage, - momentLangs: momentLangs -}; - - -// Export en strings only, temporary solution for mobile -// This is copied from middlewares/locals#t() -module.exports.enTranslations = function(){ // stringName and vars are the allowed parameters - var language = _.find(avalaibleLanguages, {code: 'en'}); - //language.momentLang = ((!isStaticPage && i18n.momentLangs[language.code]) || undefined); - var args = Array.prototype.slice.call(arguments, 0); - args.push(language.code); - return shared.i18n.t.apply(null, args); -}; diff --git a/website/server/libs/api-v2/logging.js b/website/server/libs/api-v2/logging.js deleted file mode 100644 index 454b5a5aa8..0000000000 --- a/website/server/libs/api-v2/logging.js +++ /dev/null @@ -1,35 +0,0 @@ -var nconf = require('nconf'); -var winston = require('winston'); - -var logger; - -if (!logger) { - logger = new (winston.Logger)({}); - logger.add(winston.transports.Console, {colorize:true}); // TODO remove - - if (nconf.get('NODE_ENV') !== 'production') { - logger.add(winston.transports.File, {filename: 'habitrpg.log'}); - } -} - -// A custom log function that wraps Winston. Makes it easy to instrument code -// and still possible to replace Winston in the future. -module.exports.log = function(/* variable args */) { - if (logger) - logger.log.apply(logger, arguments); -}; - -module.exports.info = function(/* variable args */) { - if (logger) - logger.info.apply(logger, arguments); -}; - -module.exports.warn = function(/* variable args */) { - if (logger) - logger.warn.apply(logger, arguments); -}; - -module.exports.error = function(/* variable args */) { - if (logger) - logger.error.apply(logger, arguments); -}; \ No newline at end of file diff --git a/website/server/libs/api-v2/utils.js b/website/server/libs/api-v2/utils.js deleted file mode 100644 index 8657bf6513..0000000000 --- a/website/server/libs/api-v2/utils.js +++ /dev/null @@ -1,204 +0,0 @@ -var nodemailer = require('nodemailer'); -var nconf = require('nconf'); -var crypto = require('crypto'); -var path = require("path"); -var request = require('request'); - -const IS_PROD = nconf.get('IS_PROD'); -const BASE_URL = nconf.get('BASE_URL'); - -module.exports.sendEmail = function(mailData) { - var smtpTransport = nodemailer.createTransport({ - service: nconf.get('SMTP_SERVICE'), - auth: { - user: nconf.get('SMTP_USER'), - pass: nconf.get('SMTP_PASS') - } - }); - - smtpTransport.sendMail(mailData, function(error, response){ - var logging = require('./api-v2/logging'); - if(error) logging.error(error); - else logging.info("Message sent: " + response.message); - smtpTransport.close(); // shut down the connection pool, no more messages - }); -} - -function getUserInfo(user, fields) { - var info = {}; - - if(fields.indexOf('name') != -1){ - if(user.auth.local){ - info.name = user.profile.name || user.auth.local.username; - }else if(user.auth.facebook){ - info.name = user.profile.name || user.auth.facebook.displayName || user.auth.facebook.username; - } - } - - if(fields.indexOf('email') != -1){ - if(user.auth.local && user.auth.local.email){ - info.email = user.auth.local.email; - }else if(user.auth.facebook && user.auth.facebook.emails && user.auth.facebook.emails[0] && user.auth.facebook.emails[0].value){ - info.email = user.auth.facebook.emails[0].value; - } - } - - if(fields.indexOf('_id') != -1){ - info._id = user._id; - } - - if(fields.indexOf('canSend') != -1){ - info.canSend = user.preferences.emailNotifications.unsubscribeFromAll !== true; - } - - return info; -} - -module.exports.getUserInfo = getUserInfo; - -module.exports.txnEmail = function(mailingInfoArray, emailType, variables, personalVariables){ - var mailingInfoArray = Array.isArray(mailingInfoArray) ? mailingInfoArray : [mailingInfoArray]; - - var variables = [ - {name: 'BASE_URL', content: BASE_URL} - ].concat(variables || []); - - // It's important to pass at least a user with its `preferences` as we need to check if he unsubscribed - mailingInfoArray = mailingInfoArray.map(function(mailingInfo){ - return mailingInfo._id ? getUserInfo(mailingInfo, ['_id', 'email', 'name', 'canSend']) : mailingInfo; - }).filter(function(mailingInfo){ - // Always send reset-password emails - // Don't check canSend for non registered users as already checked before - return (mailingInfo.email && ((!mailingInfo._id || mailingInfo.canSend) || emailType === 'reset-password')); - }); - - // Personal variables are personal to each email recipient, if they are missing - // we manually create a structure for them with RECIPIENT_NAME and RECIPIENT_UNSUB_URL - // otherwise we just add RECIPIENT_NAME and RECIPIENT_UNSUB_URL to the existing personal variables - if(!personalVariables || personalVariables.length === 0){ - personalVariables = mailingInfoArray.map(function(mailingInfo){ - return { - rcpt: mailingInfo.email, - vars: [ - { - name: 'RECIPIENT_NAME', - content: mailingInfo.name - }, - { - name: 'RECIPIENT_UNSUB_URL', - content: '/unsubscribe?code=' + module.exports.encrypt(JSON.stringify({ - _id: mailingInfo._id, - email: mailingInfo.email - })) - } - ] - } - }); - }else{ - var temporaryPersonalVariables = {}; - - mailingInfoArray.forEach(function(mailingInfo){ - temporaryPersonalVariables[mailingInfo.email] = { - name: mailingInfo.name, - _id: mailingInfo._id - } - }); - - personalVariables.forEach(function(singlePersonalVariables){ - singlePersonalVariables.vars.push( - { - name: 'RECIPIENT_NAME', - content: temporaryPersonalVariables[singlePersonalVariables.rcpt].name - }, - { - name: 'RECIPIENT_UNSUB_URL', - content: '/unsubscribe?code=' + module.exports.encrypt(JSON.stringify({ - _id: temporaryPersonalVariables[singlePersonalVariables.rcpt]._id, - email: singlePersonalVariables.rcpt - })) - } - ) - }); - } - - if(IS_PROD && mailingInfoArray.length > 0){ - request({ - url: nconf.get('EMAIL_SERVER:url') + '/job', - method: 'POST', - auth: { - user: nconf.get('EMAIL_SERVER:authUser'), - pass: nconf.get('EMAIL_SERVER:authPassword') - }, - json: { - type: 'email', - data: { - emailType: emailType, - to: mailingInfoArray, - variables: variables, - personalVariables: personalVariables - }, - options: { - priority: 'high', - attempts: 5, - backoff: {delay: 10*60*1000, type: 'fixed'} - } - } - }); - } -} - -// Encryption using http://dailyjs.com/2010/12/06/node-tutorial-5/ -// Note: would use [password-hash](https://github.com/davidwood/node-password-hash), but we need to run -// model.query().equals(), so it's a PITA to work in their verify() function - -module.exports.encryptPassword = function(password, salt) { - return crypto.createHmac('sha1', salt).update(password).digest('hex'); -} - -module.exports.makeSalt = function() { - var len = 10; - return crypto.randomBytes(Math.ceil(len / 2)).toString('hex').substring(0, len); -} - -// Prepare to export analytics object -// Export emoty methods until the right ones are ready -module.exports.analytics = { track: function() { }, trackPurchase: function() { } }; - -/** - * Load nconf and define default configuration values if config.json or ENV vars are not found - */ -module.exports.setupConfig = function(){ - if (nconf.get('IS_DEV')) - Error.stackTraceLimit = Infinity; - if (IS_PROD && nconf.get('NEW_RELIC_ENABLED') === 'true') - require('newrelic'); - - var analytics = IS_PROD && require('./api-v2/analytics'); - var analyticsTokens = { - amplitudeToken: nconf.get('AMPLITUDE_KEY'), - googleAnalytics: nconf.get('GA_ID') - } - - if(analytics){ - analytics = analytics(analyticsTokens); - // Use the right analytics methods, don't substitute the entire object - // or all the require() across the code will keep the empty methods - module.exports.analytics.track = analytics.track; - module.exports.analytics.trackPurchase = analytics.trackPurchase; - } -}; - -var algorithm = 'aes-256-ctr'; -module.exports.encrypt = function(text){ - var cipher = crypto.createCipher(algorithm,nconf.get('SESSION_SECRET')) - var crypted = cipher.update(text,'utf8','hex') - crypted += cipher.final('hex'); - return crypted; -} - -module.exports.decrypt = function(text){ - var decipher = crypto.createDecipher(algorithm,nconf.get('SESSION_SECRET')) - var dec = decipher.update(text,'hex','utf8') - dec += decipher.final('utf8'); - return dec; -} diff --git a/website/server/libs/api-v2/webhook.js b/website/server/libs/api-v2/webhook.js deleted file mode 100644 index 847c9e08b3..0000000000 --- a/website/server/libs/api-v2/webhook.js +++ /dev/null @@ -1,24 +0,0 @@ -var _ = require('lodash'); -var request = require('request'); -var validator = require('validator'); - -function sendTaskWebhook(webhooks, data) { - _.each(webhooks, function(hook){ - if (!hook.enabled || !validator.isURL(hook.url)) return; - - request.post({ - url: hook.url, - body: { - direction: data.task.direction, - task: data.task.details, - delta: data.task.delta, - user: data.user - }, - json: true - }); - }); -} - -module.exports = { - sendTaskWebhook: sendTaskWebhook -}; diff --git a/website/server/libs/api-v3/aws.js b/website/server/libs/aws.js similarity index 100% rename from website/server/libs/api-v3/aws.js rename to website/server/libs/aws.js diff --git a/website/server/libs/api-v3/baseModel.js b/website/server/libs/baseModel.js similarity index 100% rename from website/server/libs/api-v3/baseModel.js rename to website/server/libs/baseModel.js diff --git a/website/server/libs/api-v3/buildManifest.js b/website/server/libs/buildManifest.js similarity index 92% rename from website/server/libs/api-v3/buildManifest.js rename to website/server/libs/buildManifest.js index 2945ef151b..809f5fd724 100644 --- a/website/server/libs/api-v3/buildManifest.js +++ b/website/server/libs/buildManifest.js @@ -2,8 +2,8 @@ import fs from 'fs'; import path from 'path'; import nconf from 'nconf'; -const MANIFEST_FILE_PATH = path.join(__dirname, '/../../../client/manifest.json'); -const BUILD_FOLDER_PATH = path.join(__dirname, '/../../../build'); +const MANIFEST_FILE_PATH = path.join(__dirname, '/../../client/manifest.json'); +const BUILD_FOLDER_PATH = path.join(__dirname, '/../../build'); let manifestFiles = require(MANIFEST_FILE_PATH); const IS_PROD = nconf.get('IS_PROD'); diff --git a/website/server/libs/api-v3/collectionManipulators.js b/website/server/libs/collectionManipulators.js similarity index 100% rename from website/server/libs/api-v3/collectionManipulators.js rename to website/server/libs/collectionManipulators.js diff --git a/website/server/libs/api-v3/cron.js b/website/server/libs/cron.js similarity index 98% rename from website/server/libs/api-v3/cron.js rename to website/server/libs/cron.js index de65168fea..814ffe9a07 100644 --- a/website/server/libs/api-v3/cron.js +++ b/website/server/libs/cron.js @@ -1,8 +1,8 @@ import moment from 'moment'; import Bluebird from 'bluebird'; -import { model as User } from '../../models/user'; -import common from '../../../../common/'; -import { preenUserHistory } from '../../libs/api-v3/preening'; +import { model as User } from '../models/user'; +import common from '../../../common/'; +import { preenUserHistory } from '../libs/preening'; import _ from 'lodash'; import nconf from 'nconf'; diff --git a/website/server/libs/api-v3/csvStringify.js b/website/server/libs/csvStringify.js similarity index 100% rename from website/server/libs/api-v3/csvStringify.js rename to website/server/libs/csvStringify.js diff --git a/website/server/libs/api-v3/email.js b/website/server/libs/email.js similarity index 99% rename from website/server/libs/api-v3/email.js rename to website/server/libs/email.js index 26bd08f105..1e1fc79383 100644 --- a/website/server/libs/api-v3/email.js +++ b/website/server/libs/email.js @@ -1,6 +1,6 @@ import { createTransport } from 'nodemailer'; import nconf from 'nconf'; -import { TAVERN_ID } from '../../models/group'; +import { TAVERN_ID } from '../models/group'; import { encrypt } from './encryption'; import request from 'request'; import logger from './logger'; diff --git a/website/server/libs/api-v3/encryption.js b/website/server/libs/encryption.js similarity index 100% rename from website/server/libs/api-v3/encryption.js rename to website/server/libs/encryption.js diff --git a/website/server/libs/api-v3/errors.js b/website/server/libs/errors.js similarity index 97% rename from website/server/libs/api-v3/errors.js rename to website/server/libs/errors.js index 2b6d52bbe3..73a3c23c54 100644 --- a/website/server/libs/api-v3/errors.js +++ b/website/server/libs/errors.js @@ -1,4 +1,4 @@ -import common from '../../../../common'; +import common from '../../../common'; export const CustomError = common.errors.CustomError; diff --git a/website/server/libs/api-v3/i18n.js b/website/server/libs/i18n.js similarity index 96% rename from website/server/libs/api-v3/i18n.js rename to website/server/libs/i18n.js index 4c424ace39..0e71793bc4 100644 --- a/website/server/libs/api-v3/i18n.js +++ b/website/server/libs/i18n.js @@ -1,9 +1,9 @@ import fs from 'fs'; import path from 'path'; import _ from 'lodash'; -import shared from '../../../../common'; +import shared from '../../../common'; -export const localePath = path.join(__dirname, '/../../../../common/locales/'); +export const localePath = path.join(__dirname, '/../../../common/locales/'); // Store translations export let translations = {}; diff --git a/website/server/libs/api-v3/inAppPurchases.js b/website/server/libs/inAppPurchases.js similarity index 100% rename from website/server/libs/api-v3/inAppPurchases.js rename to website/server/libs/inAppPurchases.js diff --git a/website/server/libs/api-v3/logger.js b/website/server/libs/logger.js similarity index 100% rename from website/server/libs/api-v3/logger.js rename to website/server/libs/logger.js diff --git a/website/server/libs/api-v3/password.js b/website/server/libs/password.js similarity index 100% rename from website/server/libs/api-v3/password.js rename to website/server/libs/password.js diff --git a/website/server/libs/api-v3/payments.js b/website/server/libs/payments.js similarity index 99% rename from website/server/libs/api-v3/payments.js rename to website/server/libs/payments.js index 66902645d9..4ae9fcb72d 100644 --- a/website/server/libs/api-v3/payments.js +++ b/website/server/libs/payments.js @@ -6,7 +6,7 @@ import { } from './email'; import moment from 'moment'; import sendPushNotification from './pushNotifications'; -import shared from '../../../../common' ; +import shared from '../../../common' ; let api = {}; diff --git a/website/server/libs/api-v3/preening.js b/website/server/libs/preening.js similarity index 100% rename from website/server/libs/api-v3/preening.js rename to website/server/libs/preening.js diff --git a/website/server/libs/api-v3/pushNotifications.js b/website/server/libs/pushNotifications.js similarity index 79% rename from website/server/libs/api-v3/pushNotifications.js rename to website/server/libs/pushNotifications.js index 7fe821f53d..c093d1a432 100644 --- a/website/server/libs/api-v3/pushNotifications.js +++ b/website/server/libs/pushNotifications.js @@ -1,5 +1,6 @@ import _ from 'lodash'; import nconf from 'nconf'; +// TODO remove this lib and use directly the apn module import pushNotify from 'push-notify'; import apnLib from 'apn'; import logger from './logger'; @@ -7,19 +8,11 @@ import Bluebird from 'bluebird'; import { S3, } from './aws'; +import gcmLib from 'node-gcm'; // works with FCM notifications too -const GCM_API_KEY = nconf.get('PUSH_CONFIGS:GCM_SERVER_API_KEY'); +const FCM_API_KEY = nconf.get('PUSH_CONFIGS:FCM_SERVER_API_KEY'); -let gcm = GCM_API_KEY ? pushNotify.gcm({ - apiKey: GCM_API_KEY, - retries: 3, -}) : undefined; - -if (gcm) { - gcm.on('transmissionError', (err, message, registrationId) => { - logger.error('GCM Error', err, message, registrationId); - }); -} +const fcmSender = FCM_API_KEY ? new gcmLib.Sender(FCM_API_KEY) : undefined; let apn; @@ -82,15 +75,18 @@ module.exports = function sendNotification (user, details = {}) { _.each(pushDevices, pushDevice => { switch (pushDevice.type) { case 'android': - if (gcm) { - payload.title = details.title; - payload.message = details.message; - gcm.send({ - registrationId: pushDevice.regId, - delayWhileIdle: true, - timeToLive: details.timeToLive ? details.timeToLive : 15, + // Required for fcm to be received in background + payload.title = details.title; + payload.body = details.message; + + if (fcmSender) { + let message = new gcmLib.Message({ data: payload, }); + + fcmSender.send(message, { + registrationTokens: [pushDevice.regId], + }, 10, (err) => logger.error('FCM Error', err)); } break; diff --git a/website/server/libs/api-v3/pusher.js b/website/server/libs/pusher.js similarity index 100% rename from website/server/libs/api-v3/pusher.js rename to website/server/libs/pusher.js diff --git a/website/server/libs/api-v3/routes.js b/website/server/libs/routes.js similarity index 95% rename from website/server/libs/api-v3/routes.js rename to website/server/libs/routes.js index c0399fb73c..46b6478823 100644 --- a/website/server/libs/api-v3/routes.js +++ b/website/server/libs/routes.js @@ -2,8 +2,8 @@ import fs from 'fs'; import _ from 'lodash'; import { getUserLanguage, -} from '../../middlewares/api-v3/language'; -import cron from '../../middlewares/api-v3/cron'; +} from '../middlewares/language'; +import cron from '../middlewares/cron'; // Wrapper function to handler `async` route handlers that return promises // It takes the async function, execute it and pass any error to next (args[2]) diff --git a/website/server/libs/api-v3/setupMongoose.js b/website/server/libs/setupMongoose.js similarity index 100% rename from website/server/libs/api-v3/setupMongoose.js rename to website/server/libs/setupMongoose.js diff --git a/website/server/libs/api-v3/setupNconf.js b/website/server/libs/setupNconf.js similarity index 84% rename from website/server/libs/api-v3/setupNconf.js rename to website/server/libs/setupNconf.js index d88b04014e..51c643cd20 100644 --- a/website/server/libs/api-v3/setupNconf.js +++ b/website/server/libs/setupNconf.js @@ -1,7 +1,7 @@ import nconf from 'nconf'; import { join, resolve } from 'path'; -const PATH_TO_CONFIG = join(resolve(__dirname, '../../../../config.json')); +const PATH_TO_CONFIG = join(resolve(__dirname, '../../../config.json')); module.exports = function setupNconf (file) { let configFile = file || PATH_TO_CONFIG; diff --git a/website/server/libs/api-v3/setupPassport.js b/website/server/libs/setupPassport.js similarity index 100% rename from website/server/libs/api-v3/setupPassport.js rename to website/server/libs/setupPassport.js diff --git a/website/server/libs/api-v3/webhook.js b/website/server/libs/webhook.js similarity index 100% rename from website/server/libs/api-v3/webhook.js rename to website/server/libs/webhook.js diff --git a/website/server/middlewares/api-v3/analytics.js b/website/server/middlewares/analytics.js similarity index 87% rename from website/server/middlewares/api-v3/analytics.js rename to website/server/middlewares/analytics.js index 8512d16011..f86becb773 100644 --- a/website/server/middlewares/api-v3/analytics.js +++ b/website/server/middlewares/analytics.js @@ -3,7 +3,7 @@ import { track, trackPurchase, mockAnalyticsService, -} from '../../libs/api-v3/analyticsService'; +} from '../libs/analyticsService'; let service; diff --git a/website/server/middlewares/api-v2/domain.js b/website/server/middlewares/api-v2/domain.js deleted file mode 100644 index db3e65df2e..0000000000 --- a/website/server/middlewares/api-v2/domain.js +++ /dev/null @@ -1,49 +0,0 @@ -var nconf = require('nconf'); -var moment = require('moment'); -var domainMiddleware = require('domain-middleware'); -var os = require('os'); -var request = require('request'); - -var IS_PROD = nconf.get('NODE_ENV') === 'production'; - -module.exports = function(server,mongoose) { - /* if (IS_PROD) { - var mins = 3, // how often to run this check - useAvg = false, // use average over 3 minutes, or simply the last minute's report - url = 'https://api.newrelic.com/v2/applications/'+nconf.get('NEW_RELIC_APPLICATION_ID')+'/metrics/data.json?names[]=Apdex&values[]=score'; - setInterval(function(){ - // see https://docs.newrelic.com/docs/apm/apis/api-v2-examples/average-response-time-examples-api-v2, https://rpm.newrelic.com/api/explore/applications/data - request({ - url: useAvg ? url+'&from='+moment().subtract({minutes:mins}).utc().format()+'&to='+moment().utc().format()+'&summarize=true' : url, - headers: {'X-Api-Key': nconf.get('NEW_RELIC_API_KEY')} - }, function(err, response, body){ - var ts = JSON.parse(body).metric_data.metrics[0].timeslices, - score = ts[ts.length-1].values.score, - memory = os.freemem() / os.totalmem(), - memoryHigh = memory < 0.1; - - if (memoryHigh) { - var newRelicMemoryLeakMessage = '[Memory Leak] Apdex='+score+' Memory='+parseFloat(memory).toFixed(3)+' Time='+moment().format(); - throw newRelicMemoryLeakMessage; - } - }); - - var memory = os.freemem() / os.totalmem(), - memoryHigh = memory < 0.1; - if (memoryHigh) { - var memoryLeakMessage = '[Memory Leak] Memory='+parseFloat(memory).toFixed(3)+' Time='+moment().format(); - throw memoryLeakMessage; - } - }, mins*60*1000); - } */ - - return domainMiddleware({ - server: { - close:function(){ - server.close(); - mongoose.connection.close(); - } - }, - killTimeout: 10000 - }); -}; diff --git a/website/server/middlewares/api-v2/errorHandler.js b/website/server/middlewares/api-v2/errorHandler.js deleted file mode 100644 index fcea9d175c..0000000000 --- a/website/server/middlewares/api-v2/errorHandler.js +++ /dev/null @@ -1,17 +0,0 @@ -var logging = require('../../libs/api-v2/logging'); - -module.exports = function(err, req, res, next) { - //res.locals.domain.emit('error', err); - // when we hit an error, send it to admin as an email. If no ADMIN_EMAIL is present, just send it to yourself (SMTP_USER) - var stack = (err.stack ? err.stack : err.message ? err.message : err) + - "\n ----------------------------\n" + - "\n\noriginalUrl: " + req.originalUrl + - "\n\nauth: " + req.headers['x-api-user'] + ' | ' + req.headers['x-api-key'] + - "\n\nheaders: " + JSON.stringify(req.headers) + - "\n\nbody: " + JSON.stringify(req.body) + - (res.locals.ops ? "\n\ncompleted ops: " + JSON.stringify(res.locals.ops) : ""); - logging.error(stack); - var message = err.message ? err.message : err; - message = (message.length < 200) ? message : message.substring(0,100) + message.substring(message.length-100,message.length); - res.status(500).json({err:message}); //res.end(err.message); -}; diff --git a/website/server/middlewares/api-v2/locals.js b/website/server/middlewares/api-v2/locals.js deleted file mode 100644 index 223186a81a..0000000000 --- a/website/server/middlewares/api-v2/locals.js +++ /dev/null @@ -1,70 +0,0 @@ -var nconf = require('nconf'); -var _ = require('lodash'); -var utils = require('../libs/api-v2/utils'); -var shared = require('../../../common'); -var i18n = require('../libs/api-v2/i18n'); -var buildManifest = require('../libs/api-v2/buildManifest'); -var shared = require('../../../common'); -var forceRefresh = require('./forceRefresh'); -var tavernQuest = require('../models/group').tavernQuest; -var mods = require('../models/user').mods; - -// To avoid stringifying more data then we need, -// items from `env` used on the client will have to be specified in this array -var clientVars = ['language', 'isStaticPage', 'avalaibleLanguages', 'translations', - 'FACEBOOK_KEY', 'NODE_ENV', 'BASE_URL', 'GA_ID', - 'AMAZON_PAYMENTS', 'STRIPE_PUB_KEY', 'AMPLITUDE_KEY', - 'worldDmg', 'mods', 'IS_MOBILE']; - -var env = { - getManifestFiles: buildManifest.getManifestFiles, - getBuildUrl: buildManifest.getBuildUrl, - _: _, - clientVars: clientVars, - mods: mods, - Content: shared.content, - siteVersion: forceRefresh.siteVersion, - avalaibleLanguages: i18n.avalaibleLanguages, - AMAZON_PAYMENTS: { - SELLER_ID: nconf.get('AMAZON_PAYMENTS:SELLER_ID'), - CLIENT_ID: nconf.get('AMAZON_PAYMENTS:CLIENT_ID') - } -}; - -'NODE_ENV BASE_URL GA_ID STRIPE_PUB_KEY FACEBOOK_KEY AMPLITUDE_KEY'.split(' ').forEach(function(key){ - env[key] = nconf.get(key); -}); - -module.exports = function(req, res, next) { - var language = _.find(i18n.avalaibleLanguages, {code: req.language}); - var isStaticPage = req.url.split('/')[1] === 'static'; // If url contains '/static/' - - // Load moment.js language file only when not on static pages - language.momentLang = ((!isStaticPage && i18n.momentLangs[language.code]) || undefined); - - res.locals.habitrpg = _.assign(env, { - IS_MOBILE: /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(req.header('User-Agent')), - language: language, - isStaticPage: isStaticPage, - translations: i18n.translations[language.code], - t: function(){ // stringName and vars are the allowed parameters - var args = Array.prototype.slice.call(arguments, 0); - args.push(language.code); - return shared.i18n.t.apply(null, args); - }, - // Defined here and not outside of the middleware because tavernQuest might be an - // empty object until the query to fetch it finishes - worldDmg: (tavernQuest && tavernQuest.extra && tavernQuest.extra.worldDmg) || {}, - }); - - // Put query-string party (& guild but use partyInvite for backward compatibility) - // invitations into session to be handled later - // TODO once we have proper logging in place, log errors here - if(req.query.partyInvite){ - try{ - req.session.partyInvite = JSON.parse(utils.decrypt(req.query.partyInvite)); - } catch(e){} - } - - next(); -}; diff --git a/website/server/middlewares/api-v3/v2.js b/website/server/middlewares/api-v3/v2.js deleted file mode 100644 index ec49e326a4..0000000000 --- a/website/server/middlewares/api-v3/v2.js +++ /dev/null @@ -1,27 +0,0 @@ -// DEPRECATED BUT STILL ACTIVE - -// import path from 'path'; -import swagger from 'swagger-node-express'; -// import shared from '../../../../common'; -import express from 'express'; -import analytics from './analytics'; -import responseHandler from './response'; - -const v2app = express(); - -// re-set the view options because they are not inherited from the top level app -v2app.set('view engine', 'jade'); -v2app.set('views', `${__dirname}/../../../views`); - -v2app.use(analytics); -v2app.use(responseHandler); - - -// Custom Directives -v2app.use('/', require('../../routes/api-v2/auth')); - -require('../../routes/api-v2/swagger')(swagger, v2app); - -v2app.use(require('../api-v2/errorHandler')); - -module.exports = v2app; diff --git a/website/server/middlewares/apiThrottle.js b/website/server/middlewares/apiThrottle.js deleted file mode 100644 index b392cc777e..0000000000 --- a/website/server/middlewares/apiThrottle.js +++ /dev/null @@ -1,26 +0,0 @@ -var nconf = require('nconf'); -var limiter = require('connect-ratelimit'); - -var IS_PROD = nconf.get('NODE_ENV') === 'production'; - -// TODO since Habitica runs on many different servers this module is pretty useless -// as it will only block requests that go to the same server but anyway we should probably have a rate limiter in place - -module.exports = function(app) { - // disable the rate limiter middleware - if (/*!IS_PROD || */true) return; - app.use(limiter({ - end:false, - categories:{ - normal: { - // 2 req/s, but split as minutes - totalRequests: 80, - every: 60000 - } - } - })).use(function(req,res,next){ - //logging.info(res.ratelimit); - if (res.ratelimit.exceeded) return res.status(429).json({err:'Rate limit exceeded'}); - next(); - }); -}; diff --git a/website/server/middlewares/api-v3/auth.js b/website/server/middlewares/auth.js similarity index 97% rename from website/server/middlewares/api-v3/auth.js rename to website/server/middlewares/auth.js index 0feb73a98d..136159132a 100644 --- a/website/server/middlewares/api-v3/auth.js +++ b/website/server/middlewares/auth.js @@ -1,9 +1,9 @@ import { NotAuthorized, -} from '../../libs/api-v3/errors'; +} from '../libs/errors'; import { model as User, -} from '../../models/user'; +} from '../models/user'; // Strins won't be translated here because getUserLanguage has not run yet diff --git a/website/server/middlewares/api-v3/cors.js b/website/server/middlewares/cors.js similarity index 100% rename from website/server/middlewares/api-v3/cors.js rename to website/server/middlewares/cors.js diff --git a/website/server/middlewares/api-v3/cron.js b/website/server/middlewares/cron.js similarity index 97% rename from website/server/middlewares/api-v3/cron.js rename to website/server/middlewares/cron.js index e4745f734e..9ab349a4b5 100644 --- a/website/server/middlewares/api-v3/cron.js +++ b/website/server/middlewares/cron.js @@ -1,11 +1,11 @@ import _ from 'lodash'; import moment from 'moment'; -import common from '../../../../common'; -import * as Tasks from '../../models/task'; +import common from '../../../common'; +import * as Tasks from '../models/task'; import Bluebird from 'bluebird'; -import { model as Group } from '../../models/group'; -import { model as User } from '../../models/user'; -import { recoverCron, cron } from '../../libs/api-v3/cron'; +import { model as Group } from '../models/group'; +import { model as User } from '../models/user'; +import { recoverCron, cron } from '../libs/cron'; import { v4 as uuid } from 'uuid'; const daysSince = common.daysSince; diff --git a/website/server/middlewares/api-v3/domain.js b/website/server/middlewares/domain.js similarity index 100% rename from website/server/middlewares/api-v3/domain.js rename to website/server/middlewares/domain.js diff --git a/website/server/middlewares/api-v3/ensureAccessRight.js b/website/server/middlewares/ensureAccessRight.js similarity index 91% rename from website/server/middlewares/api-v3/ensureAccessRight.js rename to website/server/middlewares/ensureAccessRight.js index 2fb64ed8af..c05aedb3ff 100644 --- a/website/server/middlewares/api-v3/ensureAccessRight.js +++ b/website/server/middlewares/ensureAccessRight.js @@ -1,6 +1,6 @@ import { NotAuthorized, -} from '../../libs/api-v3/errors'; +} from '../libs/errors'; export function ensureAdmin (req, res, next) { let user = res.locals.user; diff --git a/website/server/middlewares/api-v3/ensureDevelpmentMode.js b/website/server/middlewares/ensureDevelpmentMode.js similarity index 85% rename from website/server/middlewares/api-v3/ensureDevelpmentMode.js rename to website/server/middlewares/ensureDevelpmentMode.js index 98f70d33f5..c15dde0ea0 100644 --- a/website/server/middlewares/api-v3/ensureDevelpmentMode.js +++ b/website/server/middlewares/ensureDevelpmentMode.js @@ -1,7 +1,7 @@ import nconf from 'nconf'; import { NotFound, -} from '../../libs/api-v3/errors'; +} from '../libs/errors'; module.exports = function ensureDevelpmentMode (req, res, next) { if (nconf.get('IS_PROD')) { diff --git a/website/server/middlewares/api-v3/errorHandler.js b/website/server/middlewares/errorHandler.js similarity index 97% rename from website/server/middlewares/api-v3/errorHandler.js rename to website/server/middlewares/errorHandler.js index b71fb9666e..a42251fd7d 100644 --- a/website/server/middlewares/api-v3/errorHandler.js +++ b/website/server/middlewares/errorHandler.js @@ -1,11 +1,11 @@ // The error handler middleware that handles all errors // and respond to the client -import logger from '../../libs/api-v3/logger'; +import logger from '../libs/logger'; import { CustomError, BadRequest, InternalServerError, -} from '../../libs/api-v3/errors'; +} from '../libs/errors'; import { map, omit, diff --git a/website/server/middlewares/forceRefresh.js b/website/server/middlewares/forceRefresh.js deleted file mode 100644 index f843694790..0000000000 --- a/website/server/middlewares/forceRefresh.js +++ /dev/null @@ -1,11 +0,0 @@ -// TODO do we need this module anymore in v3? No - -module.exports.siteVersion = 1; - -module.exports.middleware = function(req, res, next){ - if(req.query.siteVersion && req.query.siteVersion != module.exports.siteVersion){ - return res.status(400).json({needRefresh: true}); - } - - return next(); -}; diff --git a/website/server/middlewares/api-v3/index.js b/website/server/middlewares/index.js similarity index 95% rename from website/server/middlewares/api-v3/index.js rename to website/server/middlewares/index.js index 694fdb6ea5..2283350677 100644 --- a/website/server/middlewares/api-v3/index.js +++ b/website/server/middlewares/index.js @@ -29,14 +29,14 @@ import { const IS_PROD = nconf.get('IS_PROD'); const DISABLE_LOGGING = nconf.get('DISABLE_REQUEST_LOGGING'); -const PUBLIC_DIR = path.join(__dirname, '/../../../client'); +const PUBLIC_DIR = path.join(__dirname, '/../../client'); const SESSION_SECRET = nconf.get('SESSION_SECRET'); const TWO_WEEKS = 1000 * 60 * 60 * 24 * 14; module.exports = function attachMiddlewares (app, server) { app.set('view engine', 'jade'); - app.set('views', `${__dirname}/../views`); + app.set('views', `${__dirname}/../../views`); app.use(domainMiddleware(server, mongoose)); diff --git a/website/server/middlewares/api-v3/language.js b/website/server/middlewares/language.js similarity index 95% rename from website/server/middlewares/api-v3/language.js rename to website/server/middlewares/language.js index b83c9d5208..9223c53bad 100644 --- a/website/server/middlewares/api-v3/language.js +++ b/website/server/middlewares/language.js @@ -1,12 +1,12 @@ -import { model as User } from '../../models/user'; +import { model as User } from '../models/user'; import accepts from 'accepts'; -import common from '../../../../common'; +import common from '../../../common'; import _ from 'lodash'; import { translations, defaultLangCodes, multipleVersionsLanguages, -} from '../../libs/api-v3/i18n'; +} from '../libs/i18n'; const i18n = common.i18n; diff --git a/website/server/middlewares/api-v3/locals.js b/website/server/middlewares/locals.js similarity index 86% rename from website/server/middlewares/api-v3/locals.js rename to website/server/middlewares/locals.js index 306e4b26c7..17a945f1fd 100644 --- a/website/server/middlewares/api-v3/locals.js +++ b/website/server/middlewares/locals.js @@ -1,14 +1,13 @@ import nconf from 'nconf'; import _ from 'lodash'; -import shared from '../../../../common'; -import * as i18n from '../../libs/api-v3/i18n'; +import shared from '../../../common'; +import * as i18n from '../libs/i18n'; import { getBuildUrl, getManifestFiles, -} from '../../libs/api-v3/buildManifest'; -import forceRefresh from './../forceRefresh'; -import { tavernQuest } from '../../models/group'; -import { mods } from '../../models/user'; +} from '../libs/buildManifest'; +import { tavernQuest } from '../models/group'; +import { mods } from '../models/user'; // To avoid stringifying more data then we need, // items from `env` used on the client will have to be specified in this array @@ -24,7 +23,6 @@ let env = { clientVars: CLIENT_VARS, mods, Content: shared.content, - siteVersion: forceRefresh.siteVersion, availableLanguages: i18n.availableLanguages, AMAZON_PAYMENTS: { SELLER_ID: nconf.get('AMAZON_PAYMENTS:SELLER_ID'), diff --git a/website/server/middlewares/api-v3/maintenanceMode.js b/website/server/middlewares/maintenanceMode.js similarity index 81% rename from website/server/middlewares/api-v3/maintenanceMode.js rename to website/server/middlewares/maintenanceMode.js index 331663125a..d6f314a02e 100644 --- a/website/server/middlewares/api-v3/maintenanceMode.js +++ b/website/server/middlewares/maintenanceMode.js @@ -17,9 +17,9 @@ module.exports = function maintenanceMode (req, res, next) { if (req.headers && req.headers.accept && req.headers.accept.indexOf('text/html') !== -1) { if (req.path === '/views/static/maintenance-info') { - return res.status(503).render('../../../views/static/maintenance-info', pageVariables); + return res.status(503).render('../../views/static/maintenance-info', pageVariables); } else { - return res.status(503).render('../../../views/static/maintenance', pageVariables); + return res.status(503).render('../../views/static/maintenance', pageVariables); } } else { return res.status(503).send({ diff --git a/website/server/middlewares/api-v3/notFound.js b/website/server/middlewares/notFound.js similarity index 76% rename from website/server/middlewares/api-v3/notFound.js rename to website/server/middlewares/notFound.js index 6a71b5def4..8e2814148b 100644 --- a/website/server/middlewares/api-v3/notFound.js +++ b/website/server/middlewares/notFound.js @@ -1,6 +1,6 @@ import { NotFound, -} from '../../libs/api-v3/errors'; +} from '../libs/errors'; module.exports = function NotFoundMiddleware (req, res, next) { next(new NotFound()); diff --git a/website/server/middlewares/api-v3/redirects.js b/website/server/middlewares/redirects.js similarity index 100% rename from website/server/middlewares/api-v3/redirects.js rename to website/server/middlewares/redirects.js diff --git a/website/server/middlewares/api-v3/response.js b/website/server/middlewares/response.js similarity index 100% rename from website/server/middlewares/api-v3/response.js rename to website/server/middlewares/response.js diff --git a/website/server/middlewares/api-v3/setupBody.js b/website/server/middlewares/setupBody.js similarity index 100% rename from website/server/middlewares/api-v3/setupBody.js rename to website/server/middlewares/setupBody.js diff --git a/website/server/middlewares/api-v3/static.js b/website/server/middlewares/static.js similarity index 86% rename from website/server/middlewares/api-v3/static.js rename to website/server/middlewares/static.js index 95736fcaec..405deaa655 100644 --- a/website/server/middlewares/api-v3/static.js +++ b/website/server/middlewares/static.js @@ -4,8 +4,8 @@ import path from 'path'; const IS_PROD = nconf.get('IS_PROD'); const MAX_AGE = IS_PROD ? 31536000000 : 0; -const PUBLIC_DIR = path.join(__dirname, '/../../../client'); -const BUILD_DIR = path.join(__dirname, '/../../../build'); +const PUBLIC_DIR = path.join(__dirname, '/../../client'); +const BUILD_DIR = path.join(__dirname, '/../../build'); module.exports = function staticMiddleware (expressApp) { // TODO move all static files to a single location (one for public and one for build) diff --git a/website/server/middlewares/api-v3/v1.js b/website/server/middlewares/v1.js similarity index 83% rename from website/server/middlewares/api-v3/v1.js rename to website/server/middlewares/v1.js index abe26f42e6..c91c65b617 100644 --- a/website/server/middlewares/api-v3/v1.js +++ b/website/server/middlewares/v1.js @@ -5,14 +5,14 @@ import express from 'express'; import nconf from 'nconf'; import { NotFound, -} from '../../libs/api-v3/errors'; +} from '../libs/errors'; const router = express.Router(); // eslint-disable-line babel/new-cap const BASE_URL = nconf.get('BASE_URL'); router.all('*', function deprecatedV1 (req, res, next) { - let error = new NotFound(`API v1 is no longer supported, please use API v3 instead (${BASE_URL}/static/api).`); + let error = new NotFound(`API v1 is no longer supported, please use API v3 instead (${BASE_URL}/apidoc).`); return next(error); }); diff --git a/website/server/middlewares/v2.js b/website/server/middlewares/v2.js new file mode 100644 index 0000000000..7b35de3b72 --- /dev/null +++ b/website/server/middlewares/v2.js @@ -0,0 +1,19 @@ +// API v2 middlewares and routes +// DEPRECATED AND INACTIVE + +import express from 'express'; +import nconf from 'nconf'; +import { + NotFound, +} from '../libs/errors'; + +const router = express.Router(); // eslint-disable-line babel/new-cap + +const BASE_URL = nconf.get('BASE_URL'); + +router.all('*', function deprecatedV2 (req, res, next) { + let error = new NotFound(`API v2 is no longer supported, please use API v3 instead (${BASE_URL}/apidoc).`); + return next(error); +}); + +module.exports = router; diff --git a/website/server/middlewares/api-v3/v3.js b/website/server/middlewares/v3.js similarity index 73% rename from website/server/middlewares/api-v3/v3.js rename to website/server/middlewares/v3.js index f9aa637fa0..d7afccb28c 100644 --- a/website/server/middlewares/api-v3/v3.js +++ b/website/server/middlewares/v3.js @@ -2,17 +2,17 @@ import express from 'express'; import expressValidator from 'express-validator'; import analytics from './analytics'; import setupBody from './setupBody'; -import routes from '../../libs/api-v3/routes'; +import routes from '../libs/routes'; import path from 'path'; -const API_CONTROLLERS_PATH = path.join(__dirname, '/../../controllers/api-v3/'); -const TOP_LEVEL_CONTROLLERS_PATH = path.join(__dirname, '/../../controllers/top-level/'); +const API_CONTROLLERS_PATH = path.join(__dirname, '/../controllers/api-v3/'); +const TOP_LEVEL_CONTROLLERS_PATH = path.join(__dirname, '/../controllers/top-level/'); const v3app = express(); // re-set the view options because they are not inherited from the top level app v3app.set('view engine', 'jade'); -v3app.set('views', `${__dirname}/../../../views`); +v3app.set('views', `${__dirname}/../../views`); v3app.use(expressValidator()); v3app.use(analytics); diff --git a/website/server/models/challenge.js b/website/server/models/challenge.js index 9f6fded6f7..902b23171a 100644 --- a/website/server/models/challenge.js +++ b/website/server/models/challenge.js @@ -1,7 +1,7 @@ import mongoose from 'mongoose'; import Bluebird from 'bluebird'; import validator from 'validator'; -import baseModel from '../libs/api-v3/baseModel'; +import baseModel from '../libs/baseModel'; import _ from 'lodash'; import * as Tasks from './task'; import { model as User } from './user'; @@ -9,10 +9,10 @@ import { model as Group, TAVERN_ID, } from './group'; -import { removeFromArray } from '../libs/api-v3/collectionManipulators'; +import { removeFromArray } from '../libs/collectionManipulators'; import shared from '../../../common'; -import { sendTxn as txnEmail } from '../libs/api-v3/email'; -import sendPushNotification from '../libs/api-v3/pushNotifications'; +import { sendTxn as txnEmail } from '../libs/email'; +import sendPushNotification from '../libs/pushNotifications'; import cwait from 'cwait'; const Schema = mongoose.Schema; @@ -332,105 +332,4 @@ schema.methods.closeChal = async function closeChal (broken = {}) { Bluebird.all(backgroundTasks); }; -// Methods to adapt the new schema to API v2 responses (mostly tasks inside the challenge model) -// These will be removed once API v2 is discontinued - -// Get all the tasks belonging to a challenge, -schema.methods.getTasks = function getChallengeTasks () { - let args = Array.from(arguments); - let cb; - let type; - - if (args.length === 1) { - cb = args[0]; - } else if (args.length > 1) { - type = args[0]; - cb = args[1]; - } else { - cb = function noop () {}; - } - - let query = { - userId: { - $exists: false, - }, - - 'challenge.id': this._id, - }; - - if (type) query.type = type; - - return Tasks.Task.find(query, cb); // so we can use it as a promise -}; - -// Given challenge and an array of tasks and one of members return an API compatible challenge + tasks obj + members -schema.methods.addToChallenge = function addToChallenge (tasks, members) { - let obj = this.toJSON(); - obj.members = members; - - let tasksOrder = obj.tasksOrder; // Saving a reference because we won't return it - - obj.habits = []; - obj.dailys = []; - obj.todos = []; - obj.rewards = []; - - obj.tasksOrder = undefined; - let unordered = []; - - tasks.forEach((task) => { - // We want to push the task at the same position where it's stored in tasksOrder - let pos = tasksOrder[`${task.type}s`].indexOf(task._id); - if (pos === -1) { // Should never happen, it means the lists got out of sync - unordered.push(task.toJSONV2()); - } else { - obj[`${task.type}s`][pos] = task.toJSONV2(); - } - }); - - // Reconcile unordered items - unordered.forEach((task) => { - obj[`${task.type}s`].push(task); - }); - - // Remove null values that can be created when inserting tasks at an index > length - ['habits', 'dailys', 'rewards', 'todos'].forEach((type) => { - obj[type] = _.compact(obj[type]); - }); - - return obj; -}; - -// Return the data maintaining backward compatibility -schema.methods.getTransformedData = function getTransformedData (options) { - let self = this; - - let cb = options.cb; - let populateMembers = options.populateMembers; - - let queryMembers = { - challenges: self._id, - }; - - let selectDataMembers = '_id'; - - if (populateMembers) { - selectDataMembers += ` ${populateMembers}`; - } - - let membersQuery = User.find(queryMembers).select(selectDataMembers); - if (options.limitPopulation) membersQuery.limit(15); - - Bluebird.all([ - membersQuery.exec(), - self.getTasks(), - ]) - .then((results) => { - cb(null, self.addToChallenge(results[1], results[0])); - }) - .catch(cb); -}; - -// END of API v2 methods - export let model = mongoose.model('Challenge', schema); diff --git a/website/server/models/coupon.js b/website/server/models/coupon.js index af9953aba0..43787f5c03 100644 --- a/website/server/models/coupon.js +++ b/website/server/models/coupon.js @@ -4,11 +4,11 @@ import mongoose from 'mongoose'; import _ from 'lodash'; import shared from '../../../common'; import couponCode from 'coupon-code'; -import baseModel from '../libs/api-v3/baseModel'; +import baseModel from '../libs/baseModel'; import { BadRequest, NotAuthorized, -} from '../libs/api-v3/errors'; +} from '../libs/errors'; export let schema = new mongoose.Schema({ _id: {type: String, default: couponCode.generate}, diff --git a/website/server/models/emailUnsubscription.js b/website/server/models/emailUnsubscription.js index fe30e5d608..a0d1d0b7e6 100644 --- a/website/server/models/emailUnsubscription.js +++ b/website/server/models/emailUnsubscription.js @@ -1,6 +1,6 @@ import mongoose from 'mongoose'; import validator from 'validator'; -import baseModel from '../libs/api-v3/baseModel'; +import baseModel from '../libs/baseModel'; // A collection used to store mailing list unsubscription for non registered email addresses export let schema = new mongoose.Schema({ diff --git a/website/server/models/group.js b/website/server/models/group.js index 0474104fad..7abbe42135 100644 --- a/website/server/models/group.js +++ b/website/server/models/group.js @@ -7,17 +7,17 @@ import shared from '../../../common'; import _ from 'lodash'; import { model as Challenge} from './challenge'; import validator from 'validator'; -import { removeFromArray } from '../libs/api-v3/collectionManipulators'; +import { removeFromArray } from '../libs/collectionManipulators'; import { InternalServerError, BadRequest, -} from '../libs/api-v3/errors'; -import baseModel from '../libs/api-v3/baseModel'; -import { sendTxn as sendTxnEmail } from '../libs/api-v3/email'; +} from '../libs/errors'; +import baseModel from '../libs/baseModel'; +import { sendTxn as sendTxnEmail } from '../libs/email'; import Bluebird from 'bluebird'; import nconf from 'nconf'; -import sendPushNotification from '../libs/api-v3/pushNotifications'; -import pusher from '../libs/api-v3/pusher'; +import sendPushNotification from '../libs/pushNotifications'; +import pusher from '../libs/pusher'; const questScrolls = shared.content.quests; const Schema = mongoose.Schema; @@ -95,7 +95,7 @@ schema.statics.sanitizeUpdate = function sanitizeUpdate (updateObj) { }; // Basic fields to fetch for populating a group info -export let basicFields = 'name type privacy'; +export let basicFields = 'name type privacy leader'; schema.pre('remove', true, async function preRemoveGroup (next, done) { next(); @@ -701,6 +701,9 @@ schema.statics.tavernBoss = async function tavernBoss (user, progress) { schema.methods.leave = async function leaveGroup (user, keep = 'keep-all') { let group = this; + let update = { + $inc: {memberCount: -1}, + }; let challenges = await Challenge.find({ _id: {$in: user.challenges}, @@ -724,16 +727,14 @@ schema.methods.leave = async function leaveGroup (user, keep = 'keep-all') { pusher.trigger(`presence-group-${group._id}`, 'user-left', { userId: user._id, }); + + update.$unset = {[`quest.members.${user._id}`]: 1}; } // If user is the last one in group and group is private, delete it if (group.memberCount <= 1 && group.privacy === 'private') { promises.push(group.remove()); } else { // otherwise If the leader is leaving (or if the leader previously left, and this wasn't accounted for) - let update = { - $inc: {memberCount: -1}, - }; - if (group.leader === user._id) { let query = group.type === 'party' ? {'party._id': group._id} : {guilds: group._id}; query._id = {$ne: user._id}; @@ -748,63 +749,6 @@ schema.methods.leave = async function leaveGroup (user, keep = 'keep-all') { return await Bluebird.all(promises); }; -// API v2 compatibility methods -schema.methods.getTransformedData = function getTransformedData (options) { - let cb = options.cb; - let populateMembers = options.populateMembers; - let populateInvites = options.populateInvites; - let populateChallenges = options.populateChallenges; - - let obj = this.toJSON(); - - let queryMembers = {}; - let queryInvites = {}; - - if (this.type === 'guild') { - queryInvites['invitations.guilds.id'] = this._id; - } else { - queryInvites['invitations.party.id'] = this._id; - } - - if (this.type === 'guild') { - queryMembers.guilds = this._id; - } else { - queryMembers['party._id'] = this._id; - } - - let selectDataMembers = '_id'; - let selectDataInvites = '_id'; - let selectDataChallenges = '_id'; - - if (populateMembers) { - selectDataMembers += ` ${populateMembers}`; - } - if (populateInvites) { - selectDataInvites += ` ${populateInvites}`; - } - if (populateChallenges) { - selectDataChallenges += ` ${populateChallenges}`; - } - - let membersQuery = User.find(queryMembers).select(selectDataMembers); - if (options.limitPopulation) membersQuery.limit(15); - - Bluebird.all([ - membersQuery.exec(), - User.find(queryInvites).select(populateInvites).exec(), - Challenge.find({group: obj._id}).select(populateMembers).exec(), - ]) - .then((results) => { - obj.members = results[0]; - obj.invites = results[1]; - obj.challenges = results[2]; - - cb(null, obj); - }) - .catch(cb); -}; -// END API v2 compatibility methods - export let model = mongoose.model('Group', schema); // initialize tavern if !exists (fresh installs) diff --git a/website/server/models/iapPurchaseReceipt.js b/website/server/models/iapPurchaseReceipt.js index 6450ded11f..b29bd90425 100644 --- a/website/server/models/iapPurchaseReceipt.js +++ b/website/server/models/iapPurchaseReceipt.js @@ -1,5 +1,5 @@ import mongoose from 'mongoose'; -import baseModel from '../libs/api-v3/baseModel'; +import baseModel from '../libs/baseModel'; import validator from 'validator'; const Schema = mongoose.Schema; diff --git a/website/server/models/pushDevice.js b/website/server/models/pushDevice.js index bab33983e5..2467f6e963 100644 --- a/website/server/models/pushDevice.js +++ b/website/server/models/pushDevice.js @@ -1,5 +1,5 @@ import mongoose from 'mongoose'; -import baseModel from '../libs/api-v3/baseModel'; +import baseModel from '../libs/baseModel'; const Schema = mongoose.Schema; diff --git a/website/server/models/tag.js b/website/server/models/tag.js index 77938ab7d9..0f2ed2abaa 100644 --- a/website/server/models/tag.js +++ b/website/server/models/tag.js @@ -1,5 +1,5 @@ import mongoose from 'mongoose'; -import baseModel from '../libs/api-v3/baseModel'; +import baseModel from '../libs/baseModel'; import { v4 as uuid } from 'uuid'; import validator from 'validator'; diff --git a/website/server/models/task.js b/website/server/models/task.js index e1ba2645d7..a35e4b6c42 100644 --- a/website/server/models/task.js +++ b/website/server/models/task.js @@ -2,10 +2,10 @@ import mongoose from 'mongoose'; import shared from '../../../common'; import validator from 'validator'; import moment from 'moment'; -import baseModel from '../libs/api-v3/baseModel'; -import { InternalServerError } from '../libs/api-v3/errors'; +import baseModel from '../libs/baseModel'; +import { InternalServerError } from '../libs/errors'; import _ from 'lodash'; -import { preenHistory } from '../libs/api-v3/preening'; +import { preenHistory } from '../libs/preening'; const Schema = mongoose.Schema; @@ -22,7 +22,6 @@ export let tasksTypes = ['habit', 'daily', 'todo', 'reward']; // Important // When something changes here remember to update the client side model at common/script/libs/taskDefaults export let TaskSchema = new Schema({ - _legacyId: String, // TODO Remove when v2 is deprecated type: {type: String, enum: tasksTypes, required: true, default: tasksTypes[0]}, text: {type: String, required: true}, notes: {type: String, default: ''}, @@ -160,46 +159,6 @@ TaskSchema.methods.scoreChallengeTask = async function scoreChallengeTask (delta await chalTask.save(); }; - -// Methods to adapt the new schema to API v2 responses (mostly tasks inside the user model) -// These will be removed once API v2 is discontinued - -// toJSON for API v2 -TaskSchema.methods.toJSONV2 = function toJSONV2 () { - let toJSON = this.toJSON(); - if (toJSON._legacyId) { - toJSON.id = toJSON._legacyId; - } else { - toJSON.id = toJSON._id; - } - - if (!toJSON.challenge) toJSON.challenge = {}; - - let v3Tags = this.tags; - - toJSON.tags = {}; - v3Tags.forEach(tag => { - toJSON.tags[tag] = true; - }); - - toJSON.dateCreated = this.createdAt; - - return toJSON; -}; - -TaskSchema.statics.fromJSONV2 = function fromJSONV2 (taskObj) { - if (taskObj.id) taskObj._id = taskObj.id; - - let v2Tags = taskObj.tags || {}; - - taskObj.tags = []; - taskObj.tags = _.map(v2Tags, (tag, key) => key); - - return taskObj; -}; - -// END of API v2 methods - export let Task = mongoose.model('Task', TaskSchema); Task.schema.path('alias').validate(function valiateAliasNotTaken (alias, respond) { diff --git a/website/server/models/user/hooks.js b/website/server/models/user/hooks.js index 04ade1fa11..c2759fcfde 100644 --- a/website/server/models/user/hooks.js +++ b/website/server/models/user/hooks.js @@ -3,7 +3,7 @@ import _ from 'lodash'; import moment from 'moment'; import * as Tasks from '../task'; import Bluebird from 'bluebird'; -import baseModel from '../../libs/api-v3/baseModel'; +import baseModel from '../../libs/baseModel'; import schema from './schema'; diff --git a/website/server/models/user/methods.js b/website/server/models/user/methods.js index 0b6a0469f3..ea53bf30c3 100644 --- a/website/server/models/user/methods.js +++ b/website/server/models/user/methods.js @@ -1,6 +1,4 @@ -import shared from '../../../../common'; -import _ from 'lodash'; -import * as Tasks from '../task'; +import common from '../../../../common'; import Bluebird from 'bluebird'; import { chatDefaults, @@ -25,12 +23,12 @@ schema.methods.getGroups = function getUserGroups () { schema.methods.sendMessage = async function sendMessage (userToReceiveMessage, message) { let sender = this; - shared.refPush(userToReceiveMessage.inbox.messages, chatDefaults(message, sender)); + common.refPush(userToReceiveMessage.inbox.messages, chatDefaults(message, sender)); userToReceiveMessage.inbox.newMessages++; userToReceiveMessage._v++; userToReceiveMessage.markModified('inbox.messages'); - shared.refPush(sender.inbox.messages, defaults({sent: true}, chatDefaults(message, userToReceiveMessage))); + common.refPush(sender.inbox.messages, defaults({sent: true}, chatDefaults(message, userToReceiveMessage))); sender.markModified('inbox.messages'); let promises = [userToReceiveMessage.save(), sender.save()]; @@ -44,86 +42,13 @@ schema.methods.addNotification = function addUserNotification (type, data = {}) }); }; -// Methods to adapt the new schema to API v2 responses (mostly tasks inside the user model) -// These will be removed once API v2 is discontinued - -// Get all the tasks belonging to a user, -schema.methods.getTasks = function getUserTasks () { - let args = Array.from(arguments); - let cb; - let type; - - if (args.length === 1) { - cb = args[0]; - } else { - type = args[0]; - cb = args[1]; - } - - let query = { - userId: this._id, - }; - - if (type) query.type = type; - - Tasks.Task.find(query, cb); -}; - -// Given user and an array of tasks, return an API compatible user + tasks obj -schema.methods.addTasksToUser = function addTasksToUser (tasks) { - let obj = this.toJSON(); - - obj.id = obj._id; - obj.filters = {}; - - obj.tags = obj.tags.map(tag => { - return { - id: tag.id, - name: tag.name, - challenge: tag.challenge, - }; - }); - - let tasksOrder = obj.tasksOrder; // Saving a reference because we won't return it - - obj.habits = []; - obj.dailys = []; - obj.todos = []; - obj.rewards = []; - - obj.tasksOrder = undefined; - let unordered = []; - - tasks.forEach((task) => { - // We want to push the task at the same position where it's stored in tasksOrder - let pos = tasksOrder[`${task.type}s`].indexOf(task._id); - if (pos === -1) { // Should never happen, it means the lists got out of sync - unordered.push(task.toJSONV2()); - } else { - obj[`${task.type}s`][pos] = task.toJSONV2(); - } - }); - - // Reconcile unordered items - unordered.forEach((task) => { - obj[`${task.type}s`].push(task); - }); - - // Remove null values that can be created when inserting tasks at an index > length - ['habits', 'dailys', 'rewards', 'todos'].forEach((type) => { - obj[type] = _.compact(obj[type]); - }); - - return obj; -}; - -// Return the data maintaining backward compatibility -schema.methods.getTransformedData = function getTransformedData (cb) { - let self = this; - this.getTasks((err, tasks) => { - if (err) return cb(err); - cb(null, self.addTasksToUser(tasks)); - }); -}; - -// END of API v2 methods \ No newline at end of file +// Add stats.toNextLevel, stats.maxMP and stats.maxHealth +// to a JSONified User object +schema.methods.addComputedStatsToJSONObj = function addComputedStatsToUserJSONObj (obj) { + // NOTE: if an item is manually added to user.stats then + // common/fns/predictableRandom must be tweaked so the new item is not considered. + // Otherwise the client will have it while the server won't and the results will be different. + obj.stats.toNextLevel = common.tnl(this.stats.lvl); + obj.stats.maxHealth = common.maxHealth; + obj.stats.maxMP = common.statsComputed(this).maxMP; +}; \ No newline at end of file diff --git a/website/server/models/user/schema.js b/website/server/models/user/schema.js index 5943a5b39b..659d031000 100644 --- a/website/server/models/user/schema.js +++ b/website/server/models/user/schema.js @@ -391,7 +391,7 @@ let schema = new Schema({ skin: {type: String, default: '915533'}, shirt: {type: String, default: 'blue'}, timezoneOffset: {type: Number, default: 0}, - sound: {type: String, default: 'off', enum: ['off', 'danielTheBard', 'gokulTheme', 'luneFoxTheme', 'wattsTheme', 'rosstavoTheme']}, + sound: {type: String, default: 'off', enum: ['off', 'danielTheBard', 'gokulTheme', 'luneFoxTheme', 'wattsTheme', 'rosstavoTheme', 'dewinTheme']}, chair: {type: String, default: 'none'}, timezoneOffsetAtLastCron: Number, language: String, diff --git a/website/server/models/userNotification.js b/website/server/models/userNotification.js index f0b0c58211..9d72831a13 100644 --- a/website/server/models/userNotification.js +++ b/website/server/models/userNotification.js @@ -1,5 +1,5 @@ import mongoose from 'mongoose'; -import baseModel from '../libs/api-v3/baseModel'; +import baseModel from '../libs/baseModel'; import { v4 as uuid } from 'uuid'; import validator from 'validator'; diff --git a/website/server/routes/api-v2/auth.js b/website/server/routes/api-v2/auth.js deleted file mode 100644 index 66d1bebb3a..0000000000 --- a/website/server/routes/api-v2/auth.js +++ /dev/null @@ -1,20 +0,0 @@ -var auth = require('../../controllers/api-v2/auth'); -var express = require('express'); -var i18n = require('../../libs/api-v2/i18n'); -var router = express.Router(); -import { - getUserLanguage -} from '../../middlewares/api-v3/language'; - -/* auth.auth*/ -// auth.setupPassport(router); //TODO make this consistent with the others -router.post('/register', getUserLanguage, auth.registerUser); -router.post('/user/auth/local', getUserLanguage, auth.loginLocal); -router.post('/user/auth/social', getUserLanguage, auth.loginSocial); -router.delete('/user/auth/social', getUserLanguage, auth.auth, auth.deleteSocial); -router.post('/user/reset-password', getUserLanguage, auth.resetPassword); -router.post('/user/change-password', getUserLanguage, auth.auth, auth.changePassword); -router.post('/user/change-username', getUserLanguage, auth.auth, auth.changeUsername); -router.post('/user/change-email', getUserLanguage, auth.auth, auth.changeEmail); - -module.exports = router; diff --git a/website/server/routes/api-v2/coupon.js b/website/server/routes/api-v2/coupon.js deleted file mode 100644 index 7caee3f815..0000000000 --- a/website/server/routes/api-v2/coupon.js +++ /dev/null @@ -1,15 +0,0 @@ -var nconf = require('nconf'); -var express = require('express'); -var router = express.Router(); -var auth = require('../../controllers/api-v2/auth'); -var coupon = require('../../controllers/api-v2/coupon'); -var i18n = require('../../libs/api-v2/i18n'); -import { - getUserLanguage -} from '../../middlewares/api-v3/language'; - -router.get('/coupons', auth.authWithUrl, getUserLanguage, coupon.ensureAdmin, coupon.getCoupons); -router.post('/coupons/generate/:event', auth.auth, getUserLanguage, coupon.ensureAdmin, coupon.generateCoupons); -router.post('/user/coupon/:code', auth.auth, getUserLanguage, coupon.enterCode); - -module.exports = router; diff --git a/website/server/routes/api-v2/swagger.js b/website/server/routes/api-v2/swagger.js deleted file mode 100644 index c60d8364b6..0000000000 --- a/website/server/routes/api-v2/swagger.js +++ /dev/null @@ -1,778 +0,0 @@ -/* ----------- /api/v2 API ------------ -see https://github.com/wordnik/swagger-node-express -Every url added to router is prefaced by /api/v2 -Note: Many user-route ops exist in ../../common/script/index.js#user.ops, so that they can (1) be called both -client and server. -v1 user. Requires x-api-user (user id) and x-api-key (api key) headers, Test with: - */ - -var user = require("../../controllers/api-v2/user"); -var groups = require("../../controllers/api-v2/groups"); -var members = require("../../controllers/api-v2/members"); -var auth = require("../../controllers/api-v2/auth"); -var hall = require("../../controllers/api-v2/hall"); -var challenges = require("../../controllers/api-v2/challenges"); -var dataexport = require("../../controllers/api-v2/dataexport"); -var nconf = require("nconf"); -var cron = user.cron; -var _ = require('lodash'); -var content = require('../../../../common').content; -var i18n = require('../../libs/api-v2/i18n'); -import { - getUserLanguage -} from '../../middlewares/api-v3/language'; -var forceRefresh = require('../../middlewares/forceRefresh').middleware; - -module.exports = function(swagger, v2) { - var path = swagger.pathParam; - var body = swagger.bodyParam; - var query = swagger.queryParam; - - swagger.setAppHandler(v2); - swagger.setErrorHandler("next"); - swagger.setHeaders = function() {}; - swagger.configureSwaggerPaths("", "/api-docs", ""); - - var api = { - '/status': { - spec: { - description: "Returns the status of the server (up or down). Does not require authentication." - }, - action: function(req, res) { - return res.json({ - status: "up" - }); - } - }, - '/content': { - spec: { - description: "Get all available content objects. This is essential, since Habit often depends on item keys (eg, when purchasing a weapon). Does not require authentication.", - parameters: [query("language", "Optional language to use for content's strings. Default is english.", "string")] - }, - action: user.getContent - }, - '/content/paths': { - spec: { - description: "Show user model tree. Does not require authentication." - }, - action: user.getModelPaths - }, - "/export/history": { - spec: { - description: "Export user history", - method: 'GET' - }, - middleware: [auth.auth, getUserLanguage], - action: dataexport.history - }, - "/user/tasks/{id}/{direction}": { - spec: { - description: "Simple scoring of a task (Habit, Daily, To-Do, or Reward). This is most-likely the only API route you'll be using as a 3rd-party developer. The most common operation is for the user to gain or lose points based on some action (browsing Reddit, running a mile, 1 Pomodor, etc). Call this route, if the task you're trying to score doesn't exist, it will be created for you. When random events occur, the user._tmp variable will be filled. Critical hits can be accessed through user._tmp.crit. The Streakbonus can be accessed through user._tmp.streakBonus. Both will contain the multiplier value. When random drops occur, the following values are available: user._tmp.drop = {text,type,dialog,value,key,notes}", - parameters: [path("id", "ID of the task to score. If this task doesn't exist, a task will be created automatically", "string"), path("direction", "Either 'up' or 'down'", "string"), body('', "If you're creating a 3rd-party task, pass up any task attributes in the body (see TaskSchema).", 'object')], - method: 'POST' - }, - action: user.score - }, - "/user/tasks:GET": { - spec: { - path: '/user/tasks', - description: "Get all user's tasks" - }, - action: user.getTasks - }, - "/user/tasks:POST": { - spec: { - path: '/user/tasks', - description: "Create a task", - method: 'POST', - parameters: [body("", "Send up the whole task (see TaskSchema)", "object")] - }, - action: user.addTask - }, - "/user/tasks/{id}:GET": { - spec: { - path: '/user/tasks/{id}', - description: "Get an individual task", - parameters: [path("id", "Task ID", "string")] - }, - action: user.getTask - }, - "/user/tasks/{id}:PUT": { - spec: { - path: '/user/tasks/{id}', - description: "Update a user's task", - method: 'PUT', - parameters: [path("id", "Task ID", "string"), body("", "Send up the whole task (see TaskSchema)", "object")] - }, - action: user.updateTask - }, - "/user/tasks/{id}:DELETE": { - spec: { - path: '/user/tasks/{id}', - description: "Delete a task", - method: 'DELETE', - parameters: [path("id", "Task ID", "string")] - }, - action: user.deleteTask - }, - "/user/tasks/{id}/sort": { - spec: { - method: 'POST', - description: 'Sort tasks', - parameters: [path("id", "Task ID", "string"), query("from", "Index where you're sorting from (0-based)", "integer"), query("to", "Index where you're sorting to (0-based)", "integer")] - }, - action: user.sortTask - }, - "/user/tasks/clear-completed": { - spec: { - method: 'POST', - description: "Clears competed To-Dos (needed periodically for performance)." - }, - action: user.clearCompleted - }, - "/user/tasks/{id}/unlink": { - spec: { - method: 'POST', - description: 'Unlink a task from its challenge', - parameters: [path("id", "Task ID", "string"), query('keep', "When unlinking a challenge task, how to handle the orphans?", 'string', ['keep', 'keep-all', 'remove', 'remove-all'])] - }, - middleware: [auth.auth, getUserLanguage], - action: challenges.unlink - }, - "/user/inventory/buy": { - spec: { - description: "Get a list of buyable gear" - }, - action: user.getBuyList - }, - "/user/inventory/buy/{key}": { - spec: { - method: 'POST', - description: "Buy a gear piece and equip it automatically", - parameters: [path('key', "The key of the item to buy (call /content route for available keys)", 'string', _.keys(content.gear.flat))] - }, - action: user.buy - }, - "/user/inventory/sell/{type}/{key}": { - spec: { - method: 'POST', - description: "Sell inventory items back to Alexander", - parameters: [path('type', "The type of object you're selling back.", 'string', ['eggs', 'hatchingPotions', 'food']), path('key', "The object key you're selling back (call /content route for available keys)", 'string')] - }, - action: user.sell - }, - "/user/inventory/purchase/{type}/{key}": { - spec: { - method: 'POST', - description: "Purchase a Gem-purchasable item from Alexander", - parameters: [path('type', "The type of object you're purchasing.", 'string', ['eggs', 'hatchingPotions', 'food', 'quests', 'special']), path('key', "The object key you're purchasing (call /content route for available keys)", 'string')] - }, - action: user.purchase - }, - "/user/inventory/hourglass/{type}/{key}": { - spec: { - method: 'POST', - description: "Purchase a pet or mount using a Mystic Hourglass", - parameters: [path('type', "The type of object you're purchasing.", 'string', ['pets', 'mounts']), path('key', "The object key you're purchasing (call /content route for available keys)", 'string')] - }, - action: user.hourglassPurchase - }, - "/user/inventory/mystery/{key}": { - spec: { - method: 'POST', - description: "Purchase a Mystery Item Set using a Mystic Hourglass", - parameters: [path('key', "The key for the Mystery Set you're purchasing (call /content route for available keys)", 'string')] - }, - action: user.buyMysterySet - }, - "/user/inventory/feed/{pet}/{food}": { - spec: { - method: 'POST', - description: "Feed your pet some food", - parameters: [path('pet', "The key of the pet you're feeding", 'string', _.keys(content.pets)), path('food', "The key of the food to feed your pet", 'string', _.keys(content.food))] - }, - action: user.feed - }, - "/user/inventory/equip/{type}/{key}": { - spec: { - method: 'POST', - description: "Equip an item (either pet, mount, equipped or costume)", - parameters: [path('type', "Type to equip", 'string', ['pet', 'mount', 'equipped', 'costume']), path('key', "The object key you're equipping (call /content route for available keys)", 'string')] - }, - action: user.equip - }, - "/user/inventory/hatch/{egg}/{hatchingPotion}": { - spec: { - method: 'POST', - description: "Pour a hatching potion on an egg", - parameters: [path('egg', "The egg key to hatch", 'string', _.keys(content.eggs)), path('hatchingPotion', "The hatching potion to pour", 'string', _.keys(content.hatchingPotions))] - }, - action: user.hatch - }, - "/user:GET": { - spec: { - path: '/user', - description: "Get the full user object" - }, - action: user.getUser - }, - "/user/anonymized": { - spec: { - description: "Get the user object without any personal data" - }, - action: user.getUserAnonymized - }, - "/user:PUT": { - spec: { - path: '/user', - method: 'PUT', - description: "Update the user object (only certain attributes are supported)", - parameters: [body('', 'The user object (see UserSchema)', 'object')] - }, - action: user.update - }, - "/user:DELETE": { - spec: { - path: '/user', - method: 'DELETE', - description: "Delete a user object entirely, USE WITH CAUTION!" - }, - middleware: [auth.auth, getUserLanguage], - action: user["delete"] - }, - "/user/revive": { - spec: { - method: 'POST', - description: "Revive your dead user" - }, - action: user.revive - }, - "/user/reroll": { - spec: { - method: 'POST', - description: 'Drink the Fortify Potion (Note, it used to be called re-roll)' - }, - action: user.reroll - }, - "/user/reset": { - spec: { - method: 'POST', - description: "Completely reset your account" - }, - action: user.reset - }, - "/user/sleep": { - spec: { - method: 'POST', - description: "Toggle whether you're resting in the inn" - }, - action: user.sleep - }, - "/user/rebirth": { - spec: { - method: 'POST', - description: "Rebirth your avatar" - }, - action: user.rebirth - }, - "/user/class/change": { - spec: { - method: 'POST', - description: "Either remove your avatar's class, or change it to something new", - parameters: [query('class', "The key of the class to change to. If not provided, user's class is removed.", 'string', ['warrior', 'healer', 'rogue', 'wizard', ''])] - }, - action: user.changeClass - }, - "/user/class/allocate": { - spec: { - method: 'POST', - description: "Allocate one point towards an attribute", - parameters: [query('stat', 'The stat to allocate towards', 'string', ['str', 'per', 'int', 'con'])] - }, - action: user.allocate - }, - "/user/class/cast/{spell}": { - spec: { - method: 'POST', - description: "Casts a spell on a target.", - parameters: [path('spell', "The key of the spell to cast (see ../../common#content/index.js)", 'string'), query('targetType', "The type of object you're targeting", 'string', ['party', 'self', 'user', 'task']), query('targetId', "The ID of the object you're targeting", 'string')] - }, - action: user.cast - }, - "/user/unlock": { - spec: { - method: 'POST', - description: "Unlock a certain gem-purchaseable path (or multiple paths)", - parameters: [query('path', "The path to unlock, such as hair.green or shirts.red,shirts.blue", 'string')] - }, - action: user.unlock - }, - "/user/batch-update": { - spec: { - method: 'POST', - description: "This is an advanced route which is useful for apps which might for example need offline support. You can send a whole batch of user-based operations, which allows you to queue them up offline and send them all at once. The format is {op:'nameOfOperation',parameters:{},body:{},query:{}}", - parameters: [body('', 'The array of batch-operations to perform', 'object')] - }, - middleware: [forceRefresh, auth.auth, getUserLanguage, cron, user.sessionPartyInvite], - action: user.batchUpdate - }, - "/user/tags/{id}:GET": { - spec: { - path: '/user/tags/{id}', - method: 'GET', - description: "Get a tag", - parameters: [path('id', 'The id of the tag to get', 'string')] - }, - action: user.getTag - }, - "/user/tags:POST": { - spec: { - path: "/user/tags", - method: 'POST', - description: 'Create a new tag', - parameters: [body('', 'New tag (see UserSchema.tags)', 'object')] - }, - action: user.addTag - }, - "/user/tags:GET": { - spec: { - path: "/user/tags", - method: 'GET', - description: 'List all of a user\'s tags' - }, - action: user.getTags - }, - "/user/tags/sort": { - spec: { - method: 'POST', - description: 'Sort tags', - parameters: [query("from", "Index where you're sorting from (0-based)", "integer"), query("to", "Index where you're sorting to (0-based)", "integer")] - }, - action: user.sortTag - }, - "/user/tags/{id}:PUT": { - spec: { - path: '/user/tags/{id}', - method: 'PUT', - description: "Edit a tag", - parameters: [path('id', 'The id of the tag to edit', 'string'), body('', 'Tag edits (see UserSchema.tags)', 'object')] - }, - action: user.updateTag - }, - "/user/tags/{id}:DELETE": { - spec: { - path: '/user/tags/{id}', - method: 'DELETE', - description: 'Delete a tag', - parameters: [path('id', 'Id of tag to delete', 'string')] - }, - action: user.deleteTag - }, - "/user/webhooks": { - spec: { - method: 'POST', - description: 'Create a new webhook', - parameters: [body('', 'New Webhook {url:"webhook endpoint (required)", id:"id of webhook (shared.uuid(), optional)", enabled:"whether webhook is enabled (true by default, optional)"}', 'object')] - }, - action: user.addWebhook - }, - "/user/webhooks/{id}:PUT": { - spec: { - path: '/user/webhooks/{id}', - method: 'PUT', - description: "Edit a webhook", - parameters: [path('id', 'The id of the webhook to edit', 'string'), body('', 'New Webhook {url:"webhook endpoint (required)", id:"id of webhook (shared.uuid(), optional)", enabled:"whether webhook is enabled (true by default, optional)"}', 'object')] - }, - action: user.updateWebhook - }, - "/user/webhooks/{id}:DELETE": { - spec: { - path: '/user/webhooks/{id}', - method: 'DELETE', - description: 'Delete a webhook', - parameters: [path('id', 'Id of webhook to delete', 'string')] - }, - action: user.deleteWebhook - }, - "/user/pushDevice": { - spec: { - method: 'POST', - description: 'Add a new push devices registration ID', - parameters: [body('', 'New push registration { regId: "123123", type: "android"}', 'object')] - }, - action: user.addPushDevice - }, - "/groups:GET": { - spec: { - path: '/groups', - description: "Get a list of groups", - parameters: [query('type', "Comma-separated types of groups to return, eg 'party,guilds,public,tavern'", 'string')] - }, - middleware: [auth.auth, getUserLanguage], - action: groups.list - }, - "/groups:POST": { - spec: { - path: '/groups', - method: 'POST', - description: 'Create a group', - parameters: [body('', 'Group object (see GroupSchema)', 'object')] - }, - middleware: [auth.auth, getUserLanguage], - action: groups.create - }, - "/groups/{gid}:GET": { - spec: { - path: '/groups/{gid}', - description: "Get a group. The party the user currently is in can be accessed with the gid 'party'.", - parameters: [path('gid', 'Group ID', 'string')] - }, - middleware: [auth.auth, getUserLanguage], - action: groups.get - }, - "/groups/{gid}:POST": { - spec: { - path: '/groups/{gid}', - method: 'POST', - description: "Edit a group", - parameters: [body('', 'Group object (see GroupSchema)', 'object')] - }, - middleware: [auth.auth, getUserLanguage, groups.attachGroup], - action: groups.update - }, - "/groups/{gid}/join": { - spec: { - method: 'POST', - description: 'Join a group', - parameters: [path('gid', 'Id of the group to join', 'string')] - }, - middleware: [auth.auth, getUserLanguage, groups.attachGroup], - action: groups.join - }, - "/groups/{gid}/leave": { - spec: { - method: 'POST', - description: 'Leave a group', - parameters: [path('gid', 'ID of the group to leave', 'string')] - }, - middleware: [auth.auth, getUserLanguage, groups.attachGroup], - action: groups.leave - }, - "/groups/{gid}/invite": { - spec: { - method: 'POST', - description: "Invite a user to a group", - parameters: [path('gid', 'Group id', 'string'), body('', 'a payload of invites either under body.uuids or body.emails, only one of them!', 'object')] - }, - middleware: [auth.auth, getUserLanguage, groups.attachGroup], - action: groups.invite - }, - "/groups/{gid}/removeMember": { - spec: { - method: 'POST', - description: "Remove / boot a member from a group", - parameters: [path('gid', 'Group id', 'string'), query('uuid', 'User id to boot', 'string')] - }, - middleware: [auth.auth, getUserLanguage, groups.attachGroup], - action: groups.removeMember - }, - "/groups/{gid}/questAccept": { - spec: { - method: 'POST', - description: "Accept a quest invitation", - parameters: [path('gid', "Group id", 'string'), query('key', "optional. if provided, trigger new invite, if not, accept existing invite", 'string')] - }, - middleware: [auth.auth, getUserLanguage, groups.attachGroup], - action: groups.questAccept - }, - "/groups/{gid}/questReject": { - spec: { - method: 'POST', - description: 'Reject quest invitation', - parameters: [path('gid', 'Group id', 'string')] - }, - middleware: [auth.auth, getUserLanguage, groups.attachGroup], - action: groups.questReject - }, - "/groups/{gid}/questCancel": { - spec: { - method: 'POST', - description: 'Cancel quest before it starts (in invitation stage)', - parameters: [path('gid', 'Group to cancel quest in', 'string')] - }, - middleware: [auth.auth, getUserLanguage, groups.attachGroup], - action: groups.questCancel - }, - "/groups/{gid}/questAbort": { - spec: { - method: 'POST', - description: 'Abort quest after it has started (all progress will be lost)', - parameters: [path('gid', 'Group to abort quest in', 'string')] - }, - middleware: [auth.auth, getUserLanguage, groups.attachGroup], - action: groups.questAbort - }, - "/groups/{gid}/questLeave": { - spec: { - method: 'POST', - description: 'Leave an active quest (Quest leaders cannot leave active quests. They must abort the quest to leave)', - parameters: [path('gid', 'Group to leave quest in', 'string')] - }, - middleware: [auth.auth, getUserLanguage, groups.attachGroup], - action: groups.questLeave - }, - "/groups/{gid}/chat:GET": { - spec: { - path: "/groups/{gid}/chat", - description: "Get all chat messages", - parameters: [path('gid', 'Group to return the chat from ', 'string')] - }, - middleware: [auth.auth, getUserLanguage, groups.attachGroup], - action: groups.getChat - }, - "/groups/{gid}/chat:POST": { - spec: { - method: 'POST', - path: "/groups/{gid}/chat", - description: "Send a chat message", - parameters: [query('message', 'Chat message', 'string'), path('gid', 'Group id', 'string')] - }, - middleware: [auth.auth, getUserLanguage, groups.attachGroup], - action: groups.postChat - }, - "/groups/{gid}/chat/seen": { - spec: { - method: 'POST', - description: "Flag chat messages for a particular group as seen", - parameters: [path('gid', 'Group id', 'string')] - }, - action: groups.seenMessage - }, - "/groups/{gid}/chat/{messageId}": { - spec: { - method: 'DELETE', - description: 'Delete a chat message in a given group', - parameters: [path('gid', 'ID of the group containing the message to be deleted', 'string'), path('messageId', 'ID of message to be deleted', 'string')] - }, - middleware: [auth.auth, getUserLanguage, groups.attachGroup], - action: groups.deleteChatMessage - }, - "/groups/{gid}/chat/{mid}/like": { - spec: { - method: 'POST', - description: "Like a chat message", - parameters: [path('gid', 'Group id', 'string'), path('mid', 'Message id', 'string')] - }, - middleware: [auth.auth, getUserLanguage, groups.attachGroup], - action: groups.likeChatMessage - }, - "/groups/{gid}/chat/{mid}/flag": { - spec: { - method: 'POST', - description: "Flag a chat message", - parameters: [path('gid', 'Group id', 'string'), path('mid', 'Message id', 'string')] - }, - middleware: [auth.auth, getUserLanguage, groups.attachGroup], - action: groups.flagChatMessage - }, - "/groups/{gid}/chat/{mid}/clearflags": { - spec: { - method: 'POST', - description: "Clear flag count from message and unhide it", - parameters: [path('gid', 'Group id', 'string'), path('mid', 'Message id', 'string')] - }, - middleware: [auth.auth, getUserLanguage, groups.attachGroup], - action: groups.clearFlagCount - }, - "/members/{uuid}:GET": { - spec: { - path: '/members/{uuid}', - description: "Get a member.", - parameters: [path('uuid', 'Member ID', 'string')] - }, - middleware: [getUserLanguage], - action: members.getMember - }, - "/members/{uuid}/message": { - spec: { - method: 'POST', - description: 'Send a private message to a member', - parameters: [path('uuid', 'The UUID of the member to message', 'string'), body('', '{"message": "The private message to send"}', 'object')] - }, - middleware: [auth.auth], - action: members.sendPrivateMessage - }, - "/members/{uuid}/block": { - spec: { - method: 'POST', - description: 'Block a member from sending private messages', - parameters: [path('uuid', 'The UUID of the member to message', 'string')] - }, - middleware: [auth.auth], - action: user.blockUser - }, - "/members/{uuid}/gift": { - spec: { - method: 'POST', - description: 'Send a gift to a member', - parameters: [path('uuid', 'The UUID of the member', 'string'), body('', '{"type": "gems or subscription", "gems":{"amount":Number, "fromBalance":Boolean}, "subscription":{"months":Number}}', 'object')] - }, - middleware: [auth.auth], - action: members.sendGift - }, - "/hall/heroes": { - spec: {}, - middleware: [auth.auth, getUserLanguage], - action: hall.getHeroes - }, - "/hall/heroes/{uid}:GET": { - spec: { - path: "/hall/heroes/{uid}" - }, - middleware: [auth.auth, getUserLanguage, hall.ensureAdmin], - action: hall.getHero - }, - "/hall/heroes/{uid}:POST": { - spec: { - method: 'POST', - path: "/hall/heroes/{uid}" - }, - middleware: [auth.auth, getUserLanguage, hall.ensureAdmin], - action: hall.updateHero - }, - "/hall/patrons": { - spec: { - parameters: [query('page', 'Page number to fetch (this list is long)', 'string')] - }, - middleware: [auth.auth, getUserLanguage], - action: hall.getPatrons - }, - "/challenges:GET": { - spec: { - path: '/challenges', - description: "Get a list of challenges" - }, - middleware: [auth.auth, getUserLanguage], - action: challenges.list - }, - "/challenges:POST": { - spec: { - path: '/challenges', - method: 'POST', - description: "Create a challenge", - parameters: [body('', 'Challenge object (see ChallengeSchema)', 'object')] - }, - middleware: [auth.auth, getUserLanguage], - action: challenges.create - }, - "/challenges/{cid}:GET": { - spec: { - path: '/challenges/{cid}', - description: 'Get a challenge', - parameters: [path('cid', 'Challenge id', 'string')] - }, - middleware: [auth.auth, getUserLanguage], - action: challenges.get - }, - "/challenges/{cid}/csv": { - spec: { - description: 'Get a challenge (csv format)', - parameters: [path('cid', 'Challenge id', 'string')] - }, - action: challenges.csv - }, - "/challenges/{cid}:POST": { - spec: { - path: '/challenges/{cid}', - method: 'POST', - description: "Update a challenge", - parameters: [path('cid', 'Challenge id', 'string'), body('', 'Challenge object (see ChallengeSchema)', 'object')] - }, - middleware: [auth.auth, getUserLanguage], - action: challenges.update - }, - "/challenges/{cid}:DELETE": { - spec: { - path: '/challenges/{cid}', - method: 'DELETE', - description: "Delete a challenge", - parameters: [path('cid', 'Challenge id', 'string')] - }, - middleware: [auth.auth, getUserLanguage], - action: challenges["delete"] - }, - "/challenges/{cid}/close": { - spec: { - method: 'POST', - description: 'Close a challenge', - parameters: [path('cid', 'Challenge id', 'string'), query('uid', 'User ID of the winner', 'string', true)] - }, - middleware: [auth.auth, getUserLanguage], - action: challenges.selectWinner - }, - "/challenges/{cid}/join": { - spec: { - method: 'POST', - description: "Join a challenge", - parameters: [path('cid', 'Challenge id', 'string')] - }, - middleware: [auth.auth, getUserLanguage], - action: challenges.join - }, - "/challenges/{cid}/leave": { - spec: { - method: 'POST', - description: 'Leave a challenge', - parameters: [path('cid', 'Challenge id', 'string')] - }, - middleware: [auth.auth, getUserLanguage], - action: challenges.leave - }, - "/challenges/{cid}/member/{uid}": { - spec: { - description: "Get a member's progress in a particular challenge", - parameters: [path('cid', 'Challenge id', 'string'), path('uid', 'User id', 'string')] - }, - middleware: [auth.auth, getUserLanguage], - action: challenges.getMember - } - }; - if (nconf.get("NODE_ENV") === "development") { - api["/user/addTenGems"] = { - spec: { - method: 'POST' - }, - action: user.addTenGems - }; - api["/user/addHourglass"] = { - spec: { - method: 'POST' - }, - action: user.addHourglass - }; - }; - - _.each(api, function(route, path) { - var base; - if ((base = route.spec).description == null) { - base.description = ''; - } - _.defaults(route.spec, { - path: path, - nickname: path, - notes: route.spec.description, - summary: route.spec.description, - parameters: [], - errorResponses: [], - method: 'GET' - }); - if (route.middleware == null) { - route.middleware = path.indexOf('/user') === 0 ? [auth.auth, getUserLanguage, cron] : [i18n.getUserLanguage]; - } - swagger["add" + route.spec.method](route); - return true; - }); - - return swagger.configure((nconf.get('BASE_URL')) + "/api/v2", "2"); -}; diff --git a/website/server/routes/api-v2/unsubscription.js b/website/server/routes/api-v2/unsubscription.js deleted file mode 100644 index cbd2e16554..0000000000 --- a/website/server/routes/api-v2/unsubscription.js +++ /dev/null @@ -1,11 +0,0 @@ -var express = require('express'); -var router = express.Router(); -var i18n = require('../../libs/api-v2/i18n'); -var unsubscription = require('../../controllers/api-v2/unsubscription'); -import { - getUserLanguage -} from '../../middlewares/api-v3/language'; - -router.get('/unsubscribe', getUserLanguage, unsubscription.unsubscribe); - -module.exports = router; diff --git a/website/server/routes/payments.js b/website/server/routes/payments.js deleted file mode 100644 index 13e9ec9163..0000000000 --- a/website/server/routes/payments.js +++ /dev/null @@ -1,34 +0,0 @@ -var nconf = require('nconf'); -var express = require('express'); -var router = express.Router(); -var auth = require('../controllers/api-v2/auth'); -var payments = require('../controllers/payments'); -var i18n = require('../libs/api-v2/i18n'); -import { - getUserLanguage -} from '../../middlewares/api-v3/language'; - -router.get('/paypal/checkout', auth.authWithUrl, getUserLanguage, payments.paypalCheckout); -router.get('/paypal/checkout/success', getUserLanguage, payments.paypalCheckoutSuccess); -router.get('/paypal/subscribe', auth.authWithUrl, getUserLanguage, payments.paypalSubscribe); -router.get('/paypal/subscribe/success', getUserLanguage, payments.paypalSubscribeSuccess); -router.get('/paypal/subscribe/cancel', auth.authWithUrl, getUserLanguage, payments.paypalSubscribeCancel); -router.post('/paypal/ipn', getUserLanguage, payments.paypalIPN); // misc ipn handling - -router.post('/stripe/checkout', auth.auth, getUserLanguage, payments.stripeCheckout); -router.post('/stripe/subscribe/edit', auth.auth, getUserLanguage, payments.stripeSubscribeEdit); -//router.get('/stripe/subscribe', auth.authWithUrl, getUserLanguage, payments.stripeSubscribe); // checkout route is used (above) with ?plan= instead -router.get('/stripe/subscribe/cancel', auth.authWithUrl, getUserLanguage, payments.stripeSubscribeCancel); - -router.post('/amazon/verifyAccessToken', auth.auth, getUserLanguage, payments.amazonVerifyAccessToken); -router.post('/amazon/createOrderReferenceId', auth.auth, getUserLanguage, payments.amazonCreateOrderReferenceId); -router.post('/amazon/checkout', auth.auth, getUserLanguage, payments.amazonCheckout); -router.post('/amazon/subscribe', auth.auth, getUserLanguage, payments.amazonSubscribe); -router.get('/amazon/subscribe/cancel', auth.authWithUrl, getUserLanguage, payments.amazonSubscribeCancel); - -router.post('/iap/android/verify', auth.authWithUrl, /*getUserLanguage, */payments.iapAndroidVerify); -router.post('/iap/ios/verify', auth.auth, /*getUserLanguage, */ payments.iapIosVerify); - -router.get('/api/v2/coupons/valid-discount/:code', /*auth.authWithUrl, getUserLanguage, */ payments.validCoupon); - -module.exports = router; diff --git a/website/server/server.js b/website/server/server.js index 2271552b21..6179b1cb77 100644 --- a/website/server/server.js +++ b/website/server/server.js @@ -1,8 +1,8 @@ import nconf from 'nconf'; -import logger from './libs/api-v3/logger'; +import logger from './libs/logger'; import express from 'express'; import http from 'http'; -import attachMiddlewares from './middlewares/api-v3/index'; +import attachMiddlewares from './middlewares/index'; import Bluebird from 'bluebird'; global.Promise = Bluebird; @@ -13,11 +13,11 @@ const app = express(); app.set('port', nconf.get('PORT')); // Setup translations -import './libs/api-v3/i18n'; +import './libs/i18n'; // Load config files -import './libs/api-v3/setupMongoose'; -import './libs/api-v3/setupPassport'; +import './libs/setupMongoose'; +import './libs/setupPassport'; // Load some schemas & models import './models/challenge'; diff --git a/website/views/options/inventory/drops.jade b/website/views/options/inventory/drops.jade index 67c2b80d4e..4604bcdf9f 100644 --- a/website/views/options/inventory/drops.jade +++ b/website/views/options/inventory/drops.jade @@ -110,61 +110,19 @@ button.btn.btn-primary.btn-block(ng-show='selectedFood', ng-click='sellInventory()')=env.t('sellForGold', {item: "{{selectedFood.text()}}", gold: "{{selectedFood.value}}"}) menu.inventory-list(type='list') - li.customize-menu - menu.pets-menu(label=env.t('eggs')) - p.muted!=env.t('dropsExplanation') + li.customize-menu(ng-repeat='category in marketShopCategories') + menu.pets-menu(label='{{category.text}}') + p.muted(ng-bind-html='category.notes') - div(ng-repeat='egg in Content.eggs', ng-if='egg.canBuy(user)') - button.customize-option(class='Pet_Egg_{{::egg.key}}', - popover='{{::egg.notes()}}', popover-append-to-body='true', - popover-title!=env.t("egg", {eggType: "{{::egg.text()}}"}), + div(ng-repeat='item in category.items') + button.customize-option(class='{{item.class}}', + popover='{{item.notes}}', popover-append-to-body='true', + popover-title!='{{item.text}}', popover-trigger='mouseenter', popover-placement='top', - ng-click='purchase("eggs", egg)') - p {{::egg.value}}  - span.Pet_Currency_Gem1x.inline-gems - - li.customize-menu - menu.pets-menu(label=env.t('hatchingPotions')) - p.muted!=env.t('dropsExplanation') - div(ng-repeat='pot in Content.hatchingPotions', ng-if='!pot.premium') - button.customize-option(class='Pet_HatchingPotion_{{::pot.key}}', - popover='{{::pot.notes()}}', popover-append-to-body='true', - popover-title!=env.t("potion", {potionType: "{{::pot.text()}}"}), - popover-trigger='mouseenter', popover-placement='top', - ng-click='purchase("hatchingPotions", pot)') - p - | {{::pot.value}}  - span.Pet_Currency_Gem1x.inline-gems - - // li.customize-menu - menu.pets-menu!=env.t('magicHatchingPotions') + " - " + env.t('springEventAvailability') - p.muted=env.t('premiumPotionNoDropExplanation') - div(ng-repeat='pot in Content.hatchingPotions', ng-if='pot.premium && pot.canBuy(user)') - button.customize-option(class='Pet_HatchingPotion_{{::pot.key}}', - popover='{{::pot.notes()}} {{::pot.addlNotes()}}', popover-append-to-body='true', - popover-title!=env.t("potion", {potionType: "{{::pot.text()}}"}), - popover-trigger='mouseenter', popover-placement='top', - ng-click='purchase("hatchingPotions", pot)') - p - | {{::pot.value}}  - span.Pet_Currency_Gem1x.inline-gems - - li.customize-menu - menu.pets-menu(label=env.t('food')) - p.muted!=env.t('dropsExplanation') - div(ng-repeat='food in Content.food', ng-if='food.canBuy(user)') - button.customize-option(class='Pet_Food_{{::food.key}}', - popover='{{::food.notes()}}', popover-title='{{::food.text()}}', - popover-trigger='mouseenter', popover-placement='top', - popover-append-to-body='true', - ng-click='purchase("food", food)') - p - | {{::food.value}}  - span.Pet_Currency_Gem1x.inline-gems - - li.customize-menu - menu.pets-menu(label=env.t('quests')) - p=env.t('whereAreMyQuests') + ng-click='purchase(category.identifier, item)') + p {{item.value}}  + span.Pet_Currency_Gem1x.inline-gems(ng-if='item.currency === "gems"') + span(class='shop_gold', ng-if='item.currency === "gold"') li.customize-menu menu.pets-menu(label=env.t('special')) diff --git a/website/views/options/inventory/quests.jade b/website/views/options/inventory/quests.jade index 53a8dfa3e4..b53a3c6422 100644 --- a/website/views/options/inventory/quests.jade +++ b/website/views/options/inventory/quests.jade @@ -18,20 +18,20 @@ include ../../shared/mixins .col-md-6.border-left li.customize-menu h3.equipment-title=env.t('questsForSale') - div(ng-repeat='type in Content.userCanOwnQuestCategories') - menu.pets-menu(label='{{env.t(type + "Quests")}}') - div(ng-repeat='quest in Content.questsByLevel', ng-if='quest.canBuy(user) && quest.category === type') - button.customize-option(ng-class='lockQuest(quest) ? "inventory_quest_scroll_locked inventory_quest_scroll_{{::quest.key}}_locked locked" : "inventory_quest_scroll inventory_quest_scroll_{{::quest.key}}"', - data-popover-html="{{::lockQuest(quest,true) ? env.t('scrollsPre') : questPopover(quest) | markdown}}", - popover-title='{{::quest.text()}}', popover-append-to-body="true", + div(ng-repeat='category in questShopCategories') + menu.pets-menu(label='{{category.text}}') + div(ng-repeat='quest in category.items') + button.customize-option(ng-class='quest.class', + data-popover-html="{{quest.locked ? env.t('scrollsPre') : questPopover(quest) | markdown}}", + popover-title='{{quest.text}}', popover-append-to-body="true", popover-trigger='mouseenter', ng-click='buyQuest(quest.key)') p(ng-if='quest.unlockCondition') | {{::quest.unlockCondition.text()}} - p(ng-if='!quest.unlockCondition && quest.category !== "gold" && !lockQuest(quest)') + p(ng-if='!quest.unlockCondition && category.identifier !== "gold" && !quest.locked') | {{::quest.value}}  span.Pet_Currency_Gem1x.inline-gems - p(ng-if='quest.category === "gold" && !lockQuest(quest)') - | {{::quest.goldValue}}  + p(ng-if='category.identifier === "gold" && !quest.locked') + | {{::quest.value}}  span.shop_gold - p(ng-if='quest.lvl && lockQuest(quest)')=env.t('level') + p(ng-if='quest.lvl && quest.locked')=env.t('level') | {{::quest.lvl}} diff --git a/website/views/options/inventory/seasonal-shop.jade b/website/views/options/inventory/seasonal-shop.jade index 2c1ab34a81..9e59b18a7d 100644 --- a/website/views/options/inventory/seasonal-shop.jade +++ b/website/views/options/inventory/seasonal-shop.jade @@ -1,25 +1,16 @@ .container-fluid .stable.row: .col-xs-12 - div(class="#{env.worldDmg.seasonalShop ? 'seasonalshop_broken' : 'seasonalshop_open'}").pull-left-sm.col-centered + div(class="#{env.worldDmg.seasonalShop ? 'seasonalshop_broken' : 'seasonalshop_closed'}").pull-left-sm.col-centered .popover.static-popover.fade.right.in.pull-left-sm.col-centered .arrow.hidden-xs - h3.popover-title!=env.t('seasonalShopTitle', {linkStart:"", linkEnd: ""}) + h3.popover-title!=env.t('seasonalShopClosedTitle', {linkStart:"", linkEnd: ""}) .popover-content - p(ng-if='!env.worldDmg.seasonalShop')!=env.t('seasonalShopSummerText') - p(ng-if='env.worldDmg.seasonalShop')!=env.t('seasonalShopSummerText') + p(ng-if='!env.worldDmg.seasonalShop')!=env.t('seasonalShopClosedText') + p(ng-if='env.worldDmg.seasonalShop')!=env.t('seasonalShopClosedText') - .well(ng-if='User.user.achievements.rebirths > 0')=env.t('seasonalShopRebirth') + // .well(ng-if='User.user.achievements.rebirths > 0')=env.t('seasonalShopRebirth') - li.customize-menu.inventory-gear - // menu.pets-menu(label=env.t('quests')) - div(ng-repeat='quest in ::getSeasonalShopQuests()') - button.customize-option(ng-class='(quest.previous && !user.achievements.quests[quest.previous]) ? "inventory_quest_scroll_locked inventory_quest_scroll_{{::quest.key}}_locked locked" : "inventory_quest_scroll inventory_quest_scroll_{{::quest.key}}"' - data-popover-html="{{::quest.previous && !user.achievements.quests[quest.previous] ? env.t('scrollsPre') : questPopover(quest) | markdown}}", - popover-append-to-body='true', popover-title='{{::quest.text()}}', - popover-trigger='mouseenter', popover-placement='right', - ng-click='buyQuest(quest.key)') - p {{::quest.value}}  - span.Pet_Currency_Gem1x.inline-gems + // li.customize-menu.inventory-gear menu.pets-menu(label=env.t('seasonalItems')) div button.customize-option(class='inventory_special_seafoam', @@ -30,24 +21,12 @@ ng-click='purchase("special", Content.spells.special.seafoam)') p {{::Content.spells.special.seafoam.value}} span(class='shop_gold') - // div - button.customize-option(class='Pet_HatchingPotion_Peppermint', - popover='{{::Content.hatchingPotions.Peppermint.notes()}}', - popover-title!=env.t("potion", {potionType: "{{::Content.hatchingPotions.Peppermint.text()}}"}), - popover-trigger='mouseenter', popover-placement='right', - popover-append-to-body='true', - ng-click='purchase("hatchingPotions", Content.hatchingPotions.Peppermint)') - p {{::Content.hatchingPotions.Peppermint.value}}  - span.Pet_Currency_Gem1x.inline-gems - // div - button.customize-option(popover='{{::Content.spells.special.nye.notes()}}', popover-title='{{::Content.spells.special.nye.text()}}', popover-trigger='mouseenter', popover-placement='right', popover-append-to-body='true', ng-click='castStart(Content.spells.special.nye)', class='inventory_special_nye') - p {{Content.spells.special.nye.value}} - span(class='shop_gold') - menu.pets-menu(label='{{::label}}', ng-repeat='(set,label) in ::{summerWarrior:env.t("daringSwashbucklerSet"), summerMage:env.t("emeraldMermageSet"), summerHealer:env.t("reefSeahealerSet"), summerRogue:env.t("roguishPirateSet"), summer2015Warrior:env.t("sunfishWarriorSet"), summer2015Mage:env.t("shipSoothsayerSet"), summer2015Healer:env.t("strappingSailorSet"), summer2015Rogue:env.t("reefRenegadeSet")}') - div(ng-repeat='item in ::getSeasonalShopArray(set)', - ng-class="{transparent: user.items.gear.owned[item.key] !== undefined}") - button.customize-option(class='shop_{{::item.key}}', - popover='{{::item.notes()}}', popover-title='{{::item.text()}}', + menu.pets-menu(label='{{category.text}}', ng-repeat='category in seasonalShopCategories') + div(ng-repeat='item in category.items', + ng-class="{transparent: user.items.gear.owned[item.key] !== undefined}", + ng-if='!user.items.gear.owned[item.key]') + button.customize-option(class='shop_{{item.key}}', + popover='{{item.notes}}', popover-title='{{item.text}}', popover-trigger='mouseenter', popover-placement='right', popover-append-to-body='true', ng-click='purchase(item.type,item)') diff --git a/website/views/options/inventory/time-travelers.jade b/website/views/options/inventory/time-travelers.jade index be0c3ea7dd..80b3a35e7e 100644 --- a/website/views/options/inventory/time-travelers.jade +++ b/website/views/options/inventory/time-travelers.jade @@ -20,19 +20,10 @@ .row .col-md-12 li.customize-menu.inventory-gear - each prepend, type in {pets:'Pet-', mounts:'Mount_Head_'} - menu.pets-menu(label=env.t('#{type}'), ng-if='!hasAllTimeTravelerItemsOfType("#{type}")') - div(ng-repeat='(item, text) in Content.timeTravelStable["#{type}"]', style='margin-top:0') - button.pet-button(class='#{prepend}{{::item}}', style='margin-top:0', - ng-if='!user.items["#{type}"][item]', - popover='{{::text()}}', popover-trigger='mouseenter', - popover-placement='right', popover-append-to-body='true', - ng-click='clickTimeTravelItem("#{type}",item)') - li.customize-menu.inventory-gear - menu.pets-menu(label='{{::set.text()}}', ng-repeat='set in Content.timeTravelerStore(user.items.gear.owned)') - div(ng-repeat='item in set.items') - button.customize-option(class='shop_{{::item.key}}', - popover='{{::item.notes()}}', popover-title='{{::item.text()}}', + menu.pets-menu(label='{{::category.text}}', ng-repeat='category in timeTravelersCategories') + div(ng-repeat='item in category.items', ng-if='category.identifier === "pets" || category.identifier === "mounts" ? !user.items[category.identifier][item.key] : !user.items.gear.owned[item.key]') + button.customize-option(class='{{item.class ? item.class : "shop_"+item.key}}', + popover='{{item.notes}}', popover-title='{{item.text}}', popover-trigger='mouseenter', popover-placement='right', popover-append-to-body='true', - ng-click='User.buyMysterySet({params:{key:set.key}})') + ng-click='category.purchaseAll ? User.buyMysterySet({params:{key:category.identifier}}) : clickTimeTravelItem(category.identifier,item.key)') diff --git a/website/views/options/profile.jade b/website/views/options/profile.jade index c37d920675..036d0cf529 100644 --- a/website/views/options/profile.jade +++ b/website/views/options/profile.jade @@ -169,7 +169,7 @@ mixin customizeProfile(mobile) +buyPref('skin', ['pastelPink','pastelOrange','pastelYellow','pastelGreen','pastelBlue','pastelPurple','pastelRainbowChevron','pastelRainbowDiagonal'], 'pastelSkins', 'disabled') +buyPref('skin', ['monster','pumpkin','skeleton','zombie','ghost','shadow'], 'spookySkins', 'disabled') +buyPref('skin', ['candycorn','ogre','pumpkin2','reptile','shadow2','skeleton2','transparent','zombie2'], 'supernaturalSkins', 'disabled') - +buyPref('skin', ['clownfish','deepocean','merblue','mergold','mergreen','merruby','shark','tropicalwater'], 'splashySkins') + +buyPref('skin', ['clownfish','deepocean','merblue','mergold','mergreen','merruby','shark','tropicalwater'], 'splashySkins', 'disabled') script(id='partials/options.profile.avatar.html', type='text/ng-template') diff --git a/website/views/shared/footer.jade b/website/views/shared/footer.jade index aaa14f8b42..1537fefebe 100644 --- a/website/views/shared/footer.jade +++ b/website/views/shared/footer.jade @@ -25,7 +25,9 @@ footer.footer(ng-controller='FooterCtrl') li a(href='/static/features')=env.t('companyAbout') li - a(target='_blank', href='http://blog.habitrpg.com/')=env.t('companyBlog') + a(target='_blank', href='https://habitica.wordpress.com/')=env.t('companyBlog') + li + a(target='_blank', href='http://blog.habitrpg.com/')=env.t('tumblr') li a(href='http://habitica.wikia.com/wiki/App_and_Extension_Integrations', target='_blank')=env.t('companyExtensions') li @@ -64,7 +66,7 @@ footer.footer(ng-controller='FooterCtrl') li a(target='_blank', href='/apidoc')=env.t('APIv3') li - a(target='_blank', href='/static/api-v2')=env.t('APIv2') + a(target='_blank', href='http://habitica.wikia.com/wiki/Guidance_for_Blacksmiths')=env.t('guidanceForBlacksmiths') .col-sm-3 if (env.NODE_ENV === 'production' && !env.IS_MOBILE) h4=env.t('footerSocial') diff --git a/website/views/shared/header/menu.jade b/website/views/shared/header/menu.jade index 7c6c7b03fa..30dd70a05e 100644 --- a/website/views/shared/header/menu.jade +++ b/website/views/shared/header/menu.jade @@ -223,9 +223,9 @@ nav.toolbar(ng-controller='MenuCtrl') div ul.toolbar-submenu // Using [{k,v}] instead of {k:v,k:v} to maintain order ('off' at top) - for theme in ['off', 'danielTheBard', 'gokulTheme', 'luneFoxTheme', 'wattsTheme', 'rosstavoTheme'] + for theme in ['off', 'danielTheBard', 'gokulTheme', 'luneFoxTheme', 'wattsTheme', 'rosstavoTheme', 'dewinTheme'] li - a(ng-class="{'bg-primary':user.preferences.sound === '# {theme}'}", ng-click="set({'preferences.sound':'#{theme}'})")=env.t('audioTheme_'+theme) + a(ng-class="{'bg-info':user.preferences.sound === '#{theme}'}", ng-click="set({'preferences.sound':'#{theme}'})")=env.t('audioTheme_'+theme) ul.toolbar-controls li.toolbar-controls-button a(data-close-menu)=env.t('close') diff --git a/website/views/shared/new-stuff.jade b/website/views/shared/new-stuff.jade index 2a55d94656..d8681a0957 100644 --- a/website/views/shared/new-stuff.jade +++ b/website/views/shared/new-stuff.jade @@ -1,25 +1,155 @@ -h2 7/15/2016 - NEW IOS UPDATE AND STAFF SPOTLIGHT! +h3 8/3/2016 - AUGUST BACKGROUNDS AND ARMOIRE ITEMS; NEW AUDIO THEME + .promo_backgrounds_armoire_201608.pull-right hr tr td - h3 New iOS Update: Bug Fixes! - p We've released a new iOS update focusing on stability and bug fixes! - br - p It includes multiple crash fixes and clears up bugs such as the problems with rewards. Be sure to download it now for a better Habitica experience! - br - .promo_staff_spotlight_Lemoness.pull-right - p If you like the improvements that we’ve been making to our app, please consider reviewing this new version. It really helps us out! Old reviews get hidden with each update, but if you go to the review section you can re-post them again with a single tap. We hope you enjoy the update! - p.small.muted by viirus + h3 August Backgrounds + p We’ve added three new backgrounds: Stormy Ship, Idyllic Cabin, and Mountain Pyramid. Get them now from the Background Shop and show off your avatars in the Tavern! + p.small.muted by JInjooHat, KusSv, and Beffymaroo tr td - h3 Staff Spotlight: Lemoness! - p There's a new Staff Spotlight on the blog, featuring an interview with Leslie (aka Lemoness)! Check it out to learn about her favorite Habitica pets, her best tips for productivity, and more. + h3 August Armoire Items: Falconer Set + p There’s new Gold-purchasable equipment in the Enchanted Armoire, including the Falconer set. The Enchanted Armoire unlocks when you achieve Ultimate Gear. Better work hard on your real-life tasks to earn all the pieces! + p.small.muted by Mako413 + tr + td + h3 New Audio Theme + p There's a new audio theme available: Dewin's Theme! Select this theme from the 🔈 drop-down to level up to sounds with an 8-bit flavor. + p.small.muted by Dewin if menuItem !== 'oldNews' hr a(href='/static/old-news', target='_blank') Read older news mixin oldNews + h2 8/1/2016 - TAKE THIS CHALLENGE AND GUILD SPOTLIGHT + tr + td + .promo_takethis_armor.pull-right + h3 New Take This Challenge + p The next Take This Challenge has launched, Cast of Characters, with a focus on picturing your feelings as characters in a story. Be sure to check it out to earn additional pieces of the Take This armor set! + br + p Take This is a nonprofit that seeks to inform the gamer community about mental health issues, to provide education about mental disorders and mental illness prevention, and to reduce the stigma of mental illness. + br + p Congratulations to the winners of the last Take This Challenge, "Check Your HP": grand prize winner bookguinea, and runners-up abbey, SeanXiaaa, pushkin89, fightorflight, and ProfDzul. Plus, all participants in that Challenge have received a piece of the Take This item set. Enjoy! + p.small.muted by Lemoness, SabreCat, Doctor B, and the Take This team + tr + td + h3 Guild Spotlight + p There's a new Guild Spotlight on the blog! Check it out now to learn about some awesome Habitica Guilds that highlight fun fandoms. + p.small.muted by Lemoness + h2 7/31/2016 - HABITICA NAMING DAY AND GRYPHON PETS/MOUNTS! + tr + td + span.Mount_Body_Gryphon-RoyalPurple.pull-right + span.Mount_Head_Gryphon-RoyalPurple.pull-right(style='margin:0') + h3 Habitica Naming Day + p Happy Habitica Naming day! In honor of the day when we changed the name of the app from HabitRPG to Habitica, we've given everyone an achievement, as well as some delicious cake for your pets and mounts. + p.small.muted by Lemoness and SabreCat + tr + td + .Pet-Gryphon-RoyalPurple.pull-right + h3 Habitica Gryphon Mount and Pet + p Speaking of pets and mounts, we've given all new users our Purple Gryphon Mount, Melior! If you already received Melior last year, we've given you his little sister Meliora, a Purple Gryphon Pet. You can find them in the Rare Pet/Rare Mount sections of the stable! + br + p Thanks for being a Habitica user -- you all mean so much to us. We hope that you enjoy your presents! + p.small.muted by Lemoness and Baconsaur + h2 7/29/2016 - LAST CHANCE FOR SUMMER SPLASH; MOBILE UPDATES + tr + td + .promo_summer_classes_2016.pull-right + h3 Last Chance for Summer Splash Outfits, Hair and Skins, and Seafoam! + p Today is the final day of the Summer Splash Festival, so if you still have any remaining Summer Splash Items that you want to buy, you'd better do it now! The Seasonal Edition items and Skins won't be back until next June, and if the Limited Edition items return they will have increased prices or changed art, so strike while the summer is hot! + tr + td + .promo_mystery_201607.pull-right + h3 Last Chance for Seafloor Rogue Set + p Reminder: this is the final day to subscribe and receive the Seafloor Rogue Set! Thanks so much for your support <3 + p.small.muted by Lemoness + tr + td + h3 New iOS Update: Shops! + p We've released a new iOS update which contains the Market, Quest Shop, and Seasonal Shop! + br + p Plus, we've fixed some bugs, including the issues with the FAQ and using items on the iPad. Be sure to download it now for a better Habitica experience! + br + p If you like the improvements that we’ve been making to our app, please consider reviewing this new version. It really helps us out! Old reviews get hidden with each update, but if you go to the review section you can re-post them again with a single tap. We hope you enjoy the update! + p.small.muted by viirus + tr + td + h3 New Android Update: Shops and Task Reordering! + p We've released a new Android update which contains the Market, Quest Shop, and Seasonal Shop! + br + p Plus, we've also introduced the ability to reorder tasks and copy chat messages to your clipboard. Be sure to download it now for a better Habitica experience! + br + p If you like the improvements that we’ve been making to our app, please consider reviewing this new version. It really helps us out! We hope you enjoy the update. + p.small.muted by viirus, jjbillings, and schrockblock + h2 7/26/2016 - JULY SUBSCRIBER ITEMS + tr + td + .promo_mystery_201607.pull-right + h3 July Subscriber Items Revealed! + p The July Subscriber Items have been revealed: the Seafloor Rogue Item Set! You still have seven days to subscribe and receive the item set. + br + p Subscribers also receive the ability to buy Gems for Gold -- the longer you subscribe, the more Gems you can buy per month! There are other perks as well, such as longer access to uncompressed data. Best of all, your support directly keeps Habitica running. Thank you very much -- it means a lot to us! + p.small.muted by Lemoness + h2 7/21/2016 - ANDROID UPDATE AND GTD WIKI FEATURE! + tr + td + h3 Android Update: Inbox and Private Messages + p We've released a new Android update! + br + p Now you can send and receive Private Messages from the app with the new Inbox feature! We've also fixed a variety of bugs. Be sure to download this update now for a better Habitica experience! + br + p If you like the improvements that we’ve been making to our app, please consider reviewing this new version. It really helps us out! We hope you enjoy the update. + p.small.muted by viirus and TheHollidayInn + tr + td + h3 Featured Wiki Article: Getting Things Done with Habitica + p This month's featured Wiki article is about ideas for implementing David Allen's Getting Things Done method within Habitica. We hope that it will help you out! Be sure to check it out, and let us know what you think by reaching out on Twitter, Facebook, and Tumblr. + p.small.muted by Redphoenix and the Wiki Wizards + h2 7/19/2016 - HABITICA AT COMIC-CON, INFO FOR DEVELOPERS, LIMITED-EDITION HABITRPG POSTCARDS, AND UNCONVENTIONAL ARMOR PROMO CODES + tr + td + h3 Habitica at Comic-Con International: San Diego + p Leslie and Vicky, aka Lemoness and Redphoenix, will be attending Comic-Con this year, and we'll be giving away plenty of Habitica stickers and promo codes to earn the Unconventional Armor set! Follow the Habitica Twitter account for information on Habitica meet-ups. Hope to see you there! + tr + td + .promo_unconventional_armor.pull-right + h3 Limited Edition Habitica Postcards and Promo Codes + p Even if you can't come to meet us at Comic-Con, we've decided on a new way to earn the Unconventional Armor set. If you can't come to us, send something in your stead.... + br + p Until the end of August, if you mail the Habitica staff a postcard to decorate our office, we will mail you back a limited-edition HabitRPG postcard with a promo code for the Unconventional Armor set! + br + p Postcards should be sent to: + br + p The Habitica Team + p 202 Bicknell Avenue + p Santa Monica, California 90405 + p United States of America + br + p We hope that this will be a fun way to send the Unconventional Armor set to those of our users who are unable to meet us in person. Can't wait to read your messages! + p.small.muted by Lemoness and Redphoenix + tr + td + h3 Info for Developers + p The developer blog has an update with important information about the API v2 deprecation. Check it out if you’re interested in developing integrations for Habitica! + p.small.muted by Blade and Matteo + h2 7/15/2016 - NEW IOS UPDATE AND STAFF SPOTLIGHT! + tr + td + h3 New iOS Update: Bug Fixes! + p We've released a new iOS update focusing on stability and bug fixes! + br + p It includes multiple crash fixes and clears up bugs such as the problems with rewards. Be sure to download it now for a better Habitica experience! + br + .promo_staff_spotlight_Lemoness.pull-right + p If you like the improvements that we’ve been making to our app, please consider reviewing this new version. It really helps us out! Old reviews get hidden with each update, but if you go to the review section you can re-post them again with a single tap. We hope you enjoy the update! + p.small.muted by viirus + tr + td + h3 Staff Spotlight: Lemoness! + p There's a new Staff Spotlight on the blog, featuring an interview with Leslie (aka Lemoness)! Check it out to learn about her favorite Habitica pets, her best tips for productivity, and more. h2 7/12/2016 - NEW PET QUEST AND NEW AUDIO THEME tr td diff --git a/website/views/static/api-v2.jade b/website/views/static/api-v2.jade deleted file mode 100644 index c6e5c034f0..0000000000 --- a/website/views/static/api-v2.jade +++ /dev/null @@ -1,103 +0,0 @@ -doctype html -html - head - title Swagger UI - link(href='//fonts.googleapis.com/css?family=Droid+Sans:400,700', rel='stylesheet', type='text/css') - link(href='/bower_components/swagger-ui/dist/css/reset.css', media='screen', rel='stylesheet', type='text/css') - link(href='/bower_components/swagger-ui/dist/css/screen.css', media='screen', rel='stylesheet', type='text/css') - link(href='/bower_components/swagger-ui/dist/css/reset.css', media='print', rel='stylesheet', type='text/css') - link(href='/bower_components/swagger-ui/dist/css/screen.css', media='print', rel='stylesheet', type='text/css') - - script(src='/bower_components/swagger-ui/dist/lib/shred.bundle.js', type='text/javascript') - script(src='/bower_components/swagger-ui/dist/lib/jquery-1.8.0.min.js', type='text/javascript') - script(src='/bower_components/swagger-ui/dist/lib/jquery.slideto.min.js', type='text/javascript') - script(src='/bower_components/swagger-ui/dist/lib/jquery.wiggle.min.js', type='text/javascript') - script(src='/bower_components/swagger-ui/dist/lib/jquery.ba-bbq.min.js', type='text/javascript') - script(src='/bower_components/swagger-ui/dist/lib/handlebars-1.0.0.js', type='text/javascript') - script(src='/bower_components/swagger-ui/dist/lib/underscore-min.js', type='text/javascript') - script(src='/bower_components/swagger-ui/dist/lib/backbone-min.js', type='text/javascript') - script(src='/bower_components/swagger-ui/dist/lib/swagger.js', type='text/javascript') - script(src='/bower_components/swagger-ui/dist/swagger-ui.js', type='text/javascript') - script(src='/bower_components/swagger-ui/dist/lib/highlight.7.3.pack.js', type='text/javascript') - script(type='text/javascript'). - $(function () { - window.swaggerUi = new SwaggerUi({ - url: "/api/v2/api-docs", - dom_id: "swagger-ui-container", - supportedSubmitMethods: ['get', 'post', 'put', 'delete'], - onComplete: function(swaggerApi, swaggerUi){ - if(console) { - console.log("Loaded SwaggerUI") - } - $('pre code').each(function(i, e) {hljs.highlightBlock(e)}); - }, - onFailure: function(data) { - if(console) { - console.log("Unable to Load SwaggerUI"); - console.log(data); - } - }, - docExpansion: "none" - }); - - debugger; - - $('#input_apiKey').change(function() { - var key = $('#input_apiKey')[0].value; - console.log("apiKey: " + key); - if(key && key.trim() != "") { - console.log("added key " + key); - window.authorizations.add("apiKey", new ApiKeyAuthorization("x-api-key", key, "header")); - } - }) - $('#input_uuid').change(function() { - var key = $('#input_uuid')[0].value; - console.log("uuid: " + key); - if(key && key.trim() != "") { - console.log("added key " + key); - window.authorizations.add("uuid", new ApiKeyAuthorization("x-api-user", key, "header")); - } - }) - window.swaggerUi.load(); - }); - body.swagger-section - #header - .swagger-ui-wrap - a#logo(href='http://swagger.wordnik.com') Habitica API Documentation - - .swagger-ui-wrap(style='padding:50px') - form#api_selector - .input - input#input_uuid(placeholder='UUID', name='uuid', type='text') - input#input_apiKey(placeholder='API Key', name='apiKey', type='password') - //.input - input#input_baseUrl(placeholder='http://example.com/api', name='baseUrl', type='text') - //.input - a#explore(href='#') Explore - br - h2 API v3 - p This page contains documentation for version 2 of Habitica's API. A new API version, the third, has been released and its documentation can be found here and an introductory blog post with the most important changes here. - p API v2 is still available to give time to developers to port their apps and integration to the new API but it's considered deprecated and should not be used for new projects. It'll be completely retired shortly. - br - h2 Two API Types - p Habitica's API is meant for two different audiences: (1) extensions and scripts, and (2) full-fledged applications. Extensions and scripts can utilize Habitica's up/down scoring for individual tasks. An example of this in action is the Chrome Extension, which up-scores you for visiting productive websites, and down-scores you for visiting procrastination websites. Other examples currently in use are Pomodoro, Anki, and Github scripts - which up-score you for good behavior and downscore you for bad behavior - see the list. The second API consumer is for full-fledge applications, which need read / write access to the entire user document. An example of this would be Mobile Apps or Desktop application. - h2 Extensions / Scripts - p Habitica has a simple API for up-scoring and down-scoring third party Habits: POST /api/v2/user/tasks/{id}/{direction} (headers x-api-user and x-api-key required). - h4 Example - p curl -X POST -H "x-api-key: YOUR_API_TOKEN" -H "x-api-user: YOUR_USER_ID" https://habitica.com/api/v2/user/tasks/productivity/up - p Note: You may need to add --compressed -H "Content-Type:application/json" to your curl if you get errors. - ul - li POST to the URL /api/v2/user/tasks/{id}/{direction} - ul - li {direction} is 'up' or 'down' - li {id} is a unique identifier for a Habit, which you make up, consisting of lowercase letters. Try to make it something common, like 'productivity' or 'fitness' - because other services may piggy-back off your Habit. For example, the Chrome extension down-scores a productivity Habit when you visit vice websites (reddit, 9gag, etc). However, Pomodoro up-scores productivity when you complete a Pomodoro task. So the two services share a single Habit to score your overall productivity. If the Habit doesn't yet exist, it is created the first time you POST to this URL. - li apiToken (POST body) required - p A more advanced version that allows modification of other types of tasks is available in the /user/tasks/{id}/{direction} route in the full API below. - h2 Full API - p All API requests should be prefaced by https://habitica.com. Every authenticated request should include two headers. Your api key (x-api-key) and your user id (x-api-user). Do not include {} braces in your header (-H 'x-api-user: a94b6d9d-6b64-43ae-856c-2c3f211bd426') - h2 Requirements: - p The base-url for all routes is /api/v2. So /user actions will be at https://habitica.com/api/v2/*. You need to send x-api-user and x-api-key headers for each request. - p For create & edit paths (PUT & POST), you'll need to know the schema of the object you're trying to create or edit. See Schema definitions here - p If any of the documentation is lacking or you're having trouble with it, please post an issue to Github - #message-bar.swagger-ui-wrap - #swagger-ui-container.swagger-ui-wrap diff --git a/website/views/static/features.jade b/website/views/static/features.jade index f3cf3f01f1..50beab9751 100644 --- a/website/views/static/features.jade +++ b/website/views/static/features.jade @@ -37,9 +37,8 @@ block content a.gallery(href='/marketing/guild.png', title=env.t('marketing2Header')) img.img-rendering-auto(src='/marketing/guild.png') p.lead=env.t('marketing2Lead1') - - a.gallery(href='/common/img/sprites/spritesmith/quests/quest_vice3.png', title=env.t('marketing2Lead2Title')) - img(src='/common/img/sprites/spritesmith/quests/quest_vice3.png') + a.gallery(href='/common/img/sprites/spritesmith/quests/bosses/quest_vice3.png', title=env.t('marketing2Lead2Title')) + img(src='/common/img/sprites/spritesmith/quests/bosses/quest_vice3.png') p.lead!=env.t('marketing2Lead2') .col-md-6 a.gallery(href='/marketing/challenge.png', title=env.t('challenges')) diff --git a/website/views/static/front.jade b/website/views/static/front.jade index 3a3a06f37f..9d93b79aa4 100644 --- a/website/views/static/front.jade +++ b/website/views/static/front.jade @@ -73,7 +73,9 @@ html(ng-app='habitrpg', ng-controller='RootCtrl') li a(href='/static/plans')=env.t('groupPlans') li - a(href='http://blog.habitrpg.com/')=env.t('companyBlog') + a(href='https://habitica.wordpress.com/')=env.t('companyBlog') + li + a(href='http://blog.habitrpg.com/')=env.t('tumblr') li a(href='/static/press-kit')=env.t('presskit') li diff --git a/website/views/static/layout.jade b/website/views/static/layout.jade index e57f6c1dc9..0ac3404cfe 100644 --- a/website/views/static/layout.jade +++ b/website/views/static/layout.jade @@ -48,7 +48,7 @@ html(ng-app='habitrpg') li(class='#{menuItem=="plans" ? "active" : ""}') a(href='/static/plans')=env.t('groupPlans') li - a(href='http://blog.habitrpg.com/')=env.t('companyBlog') + a(href='https://habitica.wordpress.com/')=env.t('companyBlog') li(class='#{menuItem=="pressKit" ? "active" : ""}') a(href='/static/press-kit')=env.t('presskit') li(class='#{menuItem=="contact" ? "active" : ""}')